const | Programming Place Plus 用語集

トップページ用語集

名称 🔗

解説 🔗

いくつかのプログラミング言語において、おもに定数(constant) を示すために用いられるキーワードです。

C言語の場合 🔗

C言語では、変数宣言する際に constキーワードを付加することで、その変数のをあとから変更することを禁じる効果があります。constキーワードのこのような使い方は型修飾子に分類されます。

const int max_value = 100;
max_value = 200;  // エラー

ただしこれは定数ではなく、読み取り専用の変数とでもいうべきものになっています。そのため、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++ でも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で書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る