1. ホーム
  2. c++

[解決済み] const char* と char const* - これらは同じものですか?

2023-06-08 02:18:42

質問

私の理解では const 修飾子は右から左に読まれるべきです。そこから、なるほどと思いました。

const char*

はcharの要素を変更できないポインタですが、ポインタ自体は変更可能であり

char const*

への定数ポインタです。 mutable の文字です。

しかし、以下のようなコードに対して、以下のようなエラーが発生します。

const char* x = new char[20];
x = new char[30];   //this works, as expected
x[0] = 'a';         //gives an error as expected

char const* y = new char[20];
y = new char[20];   //this works, although the pointer should be const (right?)
y[0] = 'a';         //this doesn't although I expect it to work

で...どっちなんでしょう?私の理解やコンパイラ(VS 2005)が間違っているのでしょうか?

どのように解決するのですか?

実は、規格によると const は要素を直接 その左 . の使用は const を使うのは、単に便利なショートカットです。 ですから、次の2つの文は等価です。

char const * pointerToConstantContent1;
const char * pointerToConstantContent2;

ポインタ自体が変更されないようにするために const をアスタリスクの後に配置する必要があります。

char * const constantPointerToMutableContent;

ポインタとそれが指すコンテンツの両方を保護するために、2つのconstを使用します。

char const * const constantPointerToConstantContent;

私が個人的に採用している 常に を採用し、変更しない予定の部分の後に const を置くことで、ポインタが一定に保ちたい部分であっても一貫性を保つようにしています。