クラス データ メンバーに対して直接初期化構文が禁止されている理由
C クラス データ メンバーは、直接初期化構文 (式-リスト) 潜在的な解析のあいまいさのため。これは、次の例で明らかです。
class test { private: int s(3); // Compiler error };
コンパイラでエラーが発生します:
C 標準に従って、データ メンバーは次の構文を使用してのみ初期化できます:
制限の理由
曖昧さを避けるために、クラス データ メンバーの直接初期化構文は意図的に省略されました。次の宣言の解析は困難になる可能性があります:
struct S { int i(x); // data member with initializer? static int x; }; struct T { int i(x); // member function declaration? typedef int x; };
直接初期化構文が許可されている場合、int i(x) が初期化子を持つデータ メンバーを表すかメンバー関数宣言を表すかが不明瞭になります。このあいまいさはテンプレートにも影響します。
この解析問題を解決するために、C 標準委員会はクラス データ メンバーの直接初期化構文を禁止し、関数宣言とローカル変数用に予約することを決定しました。
以上がC のクラス データ メンバーに対して直接初期化構文が禁止されているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。