C/C++の予約語の一つで、いくつかの意味を持ち、主に変数に使う場合とクラスのメンバ関数に使う場合とがある。
constはJavaでも予約語になっているが、その意味は定義されていない。
変数に用いた場合、その変数が読み出し専用であることを示す。
なお、読み出し専用とは定数という意味ではない。例えば、何らかのハードウェアの状態(電圧や温度など)を保持するレジスタの値を参照する変数は、値が変化するにも関わらず、設定をすることはできない。
これが読み出し専用ということであり、こういった変数は、constにしておくべきである。
変数に使うconstの書き方には、二種類の使い方から三通りの組み合わせがある。
以下、順に説明する。
一般的に使われるのが、このhoge(const char *src)という書き方である。
なお、hoge(char const *src)と書いても同じ意味である。
この時、読み出し専用になるのはsrcではなく、srcが指し示す先にあるもの、である。従って、この関数内でsrcに代入してもエラーにならないが、*src=0;などとすればエラーになる。
一方、srcそのものを読み出し専用にするにはhoge(char * const src)と書くことになる。
srcに代入すればエラーになるが、srcが指し示す先にあるものは保護されない。
そしてsrcとsrcが指し示す先にあるものの双方を読み出し専用にしたければ、hoge(const char * const src)などと書くことになる。
ただし、一般的な利用法としては、最初の例にあるような、引数がポインタである場合に、そのポインタの示す先にあるものを読み出し専用にする用途で用いられることが多い。