いくつかのプログラミング言語において、おもに定数(constant) を示すために用いられるキーワードです。
C言語では、変数を宣言する際に constキーワードを付加することで、その変数の値をあとから変更することを禁じる効果があります。constキーワードのこのような使い方は型修飾子に分類されます。
const int max_value = 100;
= 200; // エラー max_value
ただしこれは定数ではなく、読み取り専用の変数とでもいうべきものになっています。そのため、const型修飾子が付加された変数を、定数式でなければならない箇所で使用することはできません。
const int size = 10;
char s[size]; // エラー。size は定数ではない
C23 で、本当の定数として使用できる constexpr が追加されました。
コンパイラは、const型修飾子が付加された変数の値を変更しようとするコードを検出するとコンパイルエラーや警告を報告しますが、コンパイルを成功させたとしても、これは未定義動作です。
また、ポインタに constキーワードを付加することで、ポインタが指し示す先にある値を変更できないようにすることもできます。このようなポインタは constポインタと呼ばれることがあります。
const int *cp = &value; // constポインタ
*cp = 0; // エラー
これは int* const cp
とは異なることに注意しなければなりません。この場合は、ポインタ変数cp 自体が const であることを意味します。
詳細は、C言語編「ポインタ②(配列や文字列との関係性)」を参照してください。
C++ でもC言語と同様に、変数の値の変更を禁じるために constキーワードを使用できます。C言語とは異なり、C++ の const は、整数型や列挙型の変数の場合には定数(実行時定数)として扱うことができるため、C言語では許されない次のコードも受け付けます。
const int size = 10;
char s[size]; // OK
なお、C++11以降では、定数として使う用途には constexprキーワードを使うことができます。
詳細は、新C++編「配列とポインタ」を参照してください。
C言語と同様に constポインタを作れるほか、参照型に constキーワードを付加することで、const参照(constリファレンス)を実現することもできます。constポインタや const参照からは、指し示す先にある値を変更できません。
const int* cp = &value; // constポインタ
const int& cr = value; // const参照
詳細は、新C++編「関数を作る」を参照してください。
メンバ関数の宣言に constキーワードを付けることで、そのメンバ関数がオブジェクトの状態(データメンバの値)を変更しないことを示すこともできます。このようなメンバ関数は、constメンバ関数と呼ばれます。なお、オブジェクトが const である場合、constメンバ関数しか呼び出すことができません。
class C {
public:
void f(int v) const
{
m_value = v; // コンパイルエラー。constメンバ関数内でデータメンバを書き換えられない
}
private:
int m_value;
};
詳細は、新C++編「クラス」を参照してください。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
![]() |
管理者情報 | プライバシーポリシー |