カテゴリ: C++ 更新日: 2025/12/27

C++のconstとconstexprの違いを完全ガイド!初心者でもわかる基本構文

constとconstexprの違い
constとconstexprの違い

先生と生徒の会話形式で理解しよう

生徒

「C++の勉強をしていたら、constconstexprという言葉が出てきました。どちらも同じ“定数”ですか?」

先生

「どちらも“変わらない値”を表しますが、使われるタイミングや役割が少し違います。」

生徒

「パソコンを触ったことがなくても理解できますか?」

先生

「大丈夫です。紙と鉛筆の例えを使いながら、C++の基本構文として丁寧に説明していきます。」

1. constとは?C++初心者向けの超基本説明

1. constとは?C++初心者向けの超基本説明
1. constとは?C++初心者向けの超基本説明

C++のconstは、「この値は途中で変更しません」とコンピュータに伝えるためのキーワードです。 キーワードとは、プログラミング言語で特別な意味を持つ予約語のことです。

たとえば、紙に「この数字は絶対に消さない」と赤ペンで書いておくようなイメージです。 プログラムの中で一度決めた値を、うっかり書き換えてしまうミスを防ぐ役割があります。


#include <iostream>

int main() {
    const int age = 20;
    // age = 25;  // これはエラーになる(値を変更できない)
    std::cout << age << std::endl;
}

この例では、ageという変数に20を入れています。 変数とは、数字や文字を入れておく箱のようなものです。 constを付けることで、「この箱の中身は変えないでください」という約束になります。

2. constexprとは?コンパイル時に決まる定数

2. constexprとは?コンパイル時に決まる定数
2. constexprとは?コンパイル時に決まる定数

constexprもC++で定数を表しますが、こちらはコンパイル時定数と呼ばれます。 コンパイルとは、私たちが書いたC++のコードを、パソコンが理解できる形に変換する作業です。

つまりconstexprは、「プログラムを実行する前から、すでに値が決まっている定数」です。 買い物に行く前から値段が印刷されているチラシのようなものだと考えると分かりやすいです。


#include <iostream>

int main() {
    constexpr int year = 2025;
    std::cout << year << std::endl;
}

このyearの値は、プログラムが動き出す前に確定しています。 そのため、処理が速くなったり、より安全なプログラムを書くことができます。

3. constとconstexprの決定的な違い

3. constとconstexprの決定的な違い
3. constとconstexprの決定的な違い

初心者が一番混乱しやすいポイントは、「どちらも変更できないなら同じでは?」という疑問です。 実は大きな違いは、「いつ値が決まるか」にあります。

  • const:実行中に決まってもよいが、後から変更できない
  • constexpr:実行前(コンパイル時)に必ず決まっている

#include <iostream>

int main() {
    int input;
    std::cin >> input;

    const int value = input;      // OK(実行中に決まる)
    // constexpr int value2 = input; // エラー(実行前に決められない)

    std::cout << value << std::endl;
}

このように、ユーザーが入力する値は、プログラムを動かしてからでないと分かりません。 そのためconstexprには使えず、constなら使える、という違いが生まれます。

4. なぜC++ではconstexprが必要なのか

4. なぜC++ではconstexprが必要なのか
4. なぜC++ではconstexprが必要なのか

C++は、処理速度や安全性をとても大切にするプログラミング言語です。 constexprを使うことで、「この値は絶対に変わらない」とコンパイラに強く伝えられます。

その結果、無駄な計算を減らしたり、間違った使い方を事前に防いだりできます。 特にC++の基本構文を学ぶ段階では、「使い分けがある」という理解がとても重要です。

最初は「基本はconst、最初から決まっている数字はconstexpr」と覚えるだけで十分です。

カテゴリの一覧へ
新着記事
New1
C++
C++の変数のスコープと有効範囲を完全解説!初心者でもわかる基本と考え方
New2
C++
C++とは?歴史と特徴を初心者向けに解説!Rustとの違いとモダン言語比較
New3
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド
New4
Rust
Rust開発環境をLinuxで構築する方法とおすすめ設定を初心者向けに徹底解説
人気記事
No.1
Java&Spring記事人気No1
C言語
C言語をオンラインで実行できる便利なコンパイラサービスまとめ【初心者向け】
No.2
Java&Spring記事人気No2
C言語
C言語の関数定義と呼び出しを完全ガイド!初心者でも分かる基本の書き方
No.3
Java&Spring記事人気No3
C++
C++の主要な実装をわかりやすく解説!GCC・Clang・MSVCの違いと特徴
No.4
Java&Spring記事人気No4
C言語
C言語の列挙型(enum)の使い方を完全ガイド!初心者でもわかる基本操作
No.5
Java&Spring記事人気No5
C言語
Makefile入門:C言語プロジェクトを自動ビルドしよう!初心者でも分かる仕組みと使い方
No.6
Java&Spring記事人気No6
C言語
C言語の開発環境をWindowsに構築する方法【Visual Studio編】
No.7
Java&Spring記事人気No7
C言語
Visual Studio CodeでC言語を実行する方法【拡張機能の設定と実行手順】
No.8
Java&Spring記事人気No8
C++
MinGWとMSYS2でWindowsにC++環境を構築する方法を徹底解説!初心者でもできるセットアップガイド