const

読み:コンスト
外語:const
品詞:名詞

C/C++予約語の一つで、いくつかの意味を持ち、主に変数に使う場合とクラスのメンバ関数に使う場合とがある。

constはJavaでも予約語になっているが、その意味は定義されていない。

概要

変数に用いた場合、その変数が読み出し専用であることを示す。

なお、読み出し専用とは定数という意味ではない。例えば、何らかのハードウェアの状態(電圧や温度など)を保持するレジスタの値を参照する変数は、値が変化するにも関わらず、設定をすることはできない。

これが読み出し専用ということであり、こういった変数は、constにしておくべきである。

使い方

変数に使うconstの書き方には、二種類の使い方から三通りの組み合わせがある。

  1. hoge(const char *src)
  2. hoge(char * const src)
  3. hoge(const char * const src)

以下、順に説明する。

hoge(const char *src)

一般的に使われるのが、このhoge(const char *src)という書き方である。

なお、hoge(char const *src)と書いても同じ意味である。

この時、読み出し専用になるのはsrcではなく、srcが指し示す先にあるもの、である。従って、この関数内でsrcに代入してもエラーにならないが、*src=0;などとすればエラーになる。

hoge(char * const src)

一方、srcそのものを読み出し専用にするにはhoge(char * const src)と書くことになる。

srcに代入すればエラーになるが、srcが指し示す先にあるものは保護されない。

hoge(const char * const src)

そしてsrcとsrcが指し示す先にあるものの双方を読み出し専用にしたければ、hoge(const char * const src)などと書くことになる。

ただし、一般的な利用法としては、最初の例にあるような、引数がポインタである場合に、そのポインタの示す先にあるものを読み出し専用にする用途で用いられることが多い。

クラスのメンバ関数に用いた場合、そのメソッドインスタンスの内容を変更しないことを宣言する。

constなインスタンスからはconstなしのメンバ関数を呼ぶことはできない。