クラス内初期化子: 括弧または等号の制限がある理由
C 11 では、クラス内初期化子は特定の構文に準拠する必要があります: 中括弧で囲むか、等号 (=) の直後に続ける必要があります。ただし、括弧の使用は許可されません。この要件の背後にある理論的根拠を理解することが重要です。
構文の曖昧さの防止
この制限は、構文の曖昧さの可能性に起因しています。次のクラスを考えてみましょう:
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing(Overloaded); };
クラス内初期化子に括弧が許可されている場合、行 4 は曖昧になります。これは、「Overloaded」型のパラメーターを受け入れる「confusing」という名前のメンバー関数の宣言、またはデータ メンバー「Overloaded」の値に初期化された「confusing」int メンバー変数の定義のいずれかとして解釈される可能性があります。
括弧による明確さ
クラス内初期化子に中括弧を要求することにより、C 11 ではこの曖昧さが解消されます。前の例を変更します。
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing{Overloaded}; };
これで、関数パラメーターに括弧の使用が許可されていないため、「confusing」が「Overloaded」の値に初期化された整数メンバーであることがわかります。
C 11 のこの構文制限により、関数の宣言とメンバー変数の宣言/初期化が明確に区別され、コードの可読性が向上します。クラス内初期化子の解釈における混乱を避けます。
以上がC 11 のクラス内イニシャライザでかっこを使用できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。