クラス データ メンバーの直接初期化構文が禁止されている理由
C では、クラス データ メンバーは ( ) 中括弧で囲まれた構文。次のコードを考えてみましょう:
class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error };次のようなエラーでコンパイルが失敗します:
解析の曖昧さを防ぐことを目的としています 。中括弧で囲まれた初期化が許可されている場合、コンパイラーは次のような状況で宣言を誤って解釈する可能性があります。
struct S { int i(x); // data member with initializer // Other code static int x; };ここでは、i(x) がデータ メンバー初期化子であるかメンバー関数宣言であるかは不明であり、両方とも次のようになります。同じ構文です。このあいまいさに対処するために、C は次の制限を選択しました:
以上が中括弧で囲まれた構文を使用してクラス データ メンバーを初期化できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。