ホームページ >バックエンド開発 >C++ >C での const の配置: `const T` と `T const` – どちらを使用する必要がありますか?

C での const の配置: `const T` と `T const` – どちらを使用する必要がありますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-18 11:51:16944ブラウズ

Const Placement in C  : `const T` vs. `T const` – Which Should I Use?

「const T」と「T const」の両方が有効である理由とどちらを使用する必要がありますか?

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:

  • void * function1(void) は void ポインターを返す関数を宣言します。
  • void (* function2)(void) は void を返す関数への関数ポインターを宣言します.

もう一度言いますが、左から右へのパーサー解釈は次の例で明らかです。 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。