クラス内データ メンバーの初期化の異常: C 標準の詳細を調べる
() で直接初期化できるローカル データ メンバーとは異なります構文では、クラス内データ メンバーはこの便利なメソッドを無視します。この特殊性により、多くのプログラマーが困惑し、その根本的な理論的根拠についての疑問が生じています。
C 標準によれば、解析のあいまいさを防ぐために、() を使用したクラス データ メンバーの直接初期化は禁止されています。次のシナリオを考えてみましょう:
class S { public: int i(x); // data member with initializer };
この制限がないと、コンパイラは、宣言が初期化子を持つデータ メンバーを参照しているのか、それともメンバー関数宣言を参照しているのかを判断しようとするときに混乱する可能性があります。
例:
struct S { int i(j); // member function declaration int j; // data member without an initializer };
あいまいな状況でデータ メンバーよりもメンバー関数を優先する既存の解析ルールを適用すると、誤った結果が生じる可能性があります。解釈。このような混乱を避けるために、C 標準ではクラス データ メンバーの直接初期化を禁止することを選択しました。
それでも、= 初期化節構文を使用するなど、代替の初期化メソッドは引き続き使用できます。
int s = 3;
または、中括弧で囲まれた初期化子リスト:
int s{3};
これらに従うことでメソッドを使用すると、プログラマは、ローカルの対応するものとは異なる構文を使用しても、クラス データ メンバーを効果的に初期化できます。
以上がC でクラス内データ メンバーを初期化するのに括弧を使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。