C では、 const キーワードを使用して変更を防ぐことができますオブジェクトまたはポインタの。一部の開発者にとって驚くべきことですが、構文はさまざまです。
const Object* obj; // can't change data Object* const obj; // can't change pointer const Object* const obj; // can't change data or pointer Object const *obj; // same as const Object* obj;
どちらの構文が最初に来たのか、なぜ両方が正しいのかという疑問が生じます。
Const 配置の歴史的起源
C および C の言語文法では、左から右への記述が許可されています。パーサー。つまり、コンパイラは入力を左から右に読み取り、トークンに遭遇すると処理します。
宣言の解析中、 トークンが消費されると、宣言の状態はポインター型に変わります。 const が最初に に遭遇した場合、修飾子はポインター宣言に適用されます。 * の前に修飾子がある場合、その修飾子は参照されるデータに適用されます。
意味の意味は const の位置によって変わらないため、両方の配置が受け入れられます。
関数ポインターの影響
関数でも同様の状況が発生します。 pointers:
もう一度言いますが、左から右へのパーサー解釈は次の例で明らかです。 syntax.
優先使用法
結局のところ、一方の構文が他方の構文よりも明確に優先されるということはありません。選択は、読みやすさと開発者の好みに基づいて行う必要があります。
ただし、ポインターおよび関数ポインターの構文との一貫性が必要な場合は、参照される型の左側に const を使用する方が適切な場合があります。
const Object* obj; // no change to obj pointer or value Object const *obj; // no change to obj pointer or value
以上がC での const の配置: `const T` と `T const` – どちらを使用する必要がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。