クラス初期化子のあいまいさ: 中括弧と等号の役割
C 11 では、クラス内メンバー初期化子は Curly を使用してのみ定義できます中かっこ ({}) または等号 (=)。この制限により、なぜこの目的で括弧が使用できないのかという疑問が生じます。
この制限の主な理由の 1 つは、構文が曖昧になる可能性があることです。次のクラスを考えてみましょう:
class BadTimes { public: struct Overloaded; int Overloaded; // Data member int confusing(Overloaded); // Function declaration };
初期化子に括弧が許可されている場合、行「int混乱(Overloaded);」曖昧になる可能性があります。これは、初期化子に括弧が使用されている場合は、関数宣言 (上記のとおり) またはメンバー変数の初期化として解釈される可能性があります。
int confusing{Overloaded};
この曖昧さを排除するには、中括弧または等号が必要です。 。これにより、メンバー変数初期化子と関数宣言の間に混乱が生じなくなります:
class BadTimes { public: struct Overloaded; int Overloaded; int confusing{Overloaded}; // Member variable initialized with Overloaded };
以上がC 11 のクラス内イニシャライザで括弧が使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。