C++のconstとconstexprの違いを完全ガイド!初心者でもわかる基本構文
生徒
「C++の勉強をしていたら、constとconstexprという言葉が出てきました。どちらも同じ“定数”ですか?」
先生
「どちらも“変わらない値”を表しますが、使われるタイミングや役割が少し違います。」
生徒
「パソコンを触ったことがなくても理解できますか?」
先生
「大丈夫です。紙と鉛筆の例えを使いながら、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とは?コンパイル時に決まる定数
constexprもC++で定数を表しますが、こちらはコンパイル時定数と呼ばれます。
コンパイルとは、私たちが書いたC++のコードを、パソコンが理解できる形に変換する作業です。
つまりconstexprは、「プログラムを実行する前から、すでに値が決まっている定数」です。
買い物に行く前から値段が印刷されているチラシのようなものだと考えると分かりやすいです。
#include <iostream>
int main() {
constexpr int year = 2025;
std::cout << year << std::endl;
}
このyearの値は、プログラムが動き出す前に確定しています。
そのため、処理が速くなったり、より安全なプログラムを書くことができます。
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が必要なのか
C++は、処理速度や安全性をとても大切にするプログラミング言語です。
constexprを使うことで、「この値は絶対に変わらない」とコンパイラに強く伝えられます。
その結果、無駄な計算を減らしたり、間違った使い方を事前に防いだりできます。 特にC++の基本構文を学ぶ段階では、「使い分けがある」という理解がとても重要です。
最初は「基本はconst、最初から決まっている数字はconstexpr」と覚えるだけで十分です。