📑

[C++] ポインタ変数に付けるconstの位置による意味の違い

2023/07/17に公開

ポインタ変数にconstを付けて宣言するということが多々あるが、
constの位置による意味の違いがいつもよくわからなくなる。
そのため備忘録として残す。

*より前なら中身、後ならアドレスが変更不可

以下のようにコードを書いて確認した。
temp1はより前にconstを付けて、temp2はより後ろに付けている。

const char* temp1 = "hoge";
temp1[0] = '1';  // NG
temp1 = nullptr; // OK

char* const temp2 = "hoge";
temp2[0] = '1';  // OK
temp2 = nullptr; // NG

*より前にconstが付いている場合は中身が変更不可になる。
*より後の場合はアドレスが変更不可になる。

どちらも変更させたくないなら以下のようにどちらにもconstを付けることもできる。

const char* const temp3 = "hoge";
temp3[0] = '1';  // NG
temp3 = nullptr; // NG

Discussion