ホームページ >バックエンド開発 >C++ >C 11 のクラス内イニシャライザで括弧が使用できないのはなぜですか?

C 11 のクラス内イニシャライザで括弧が使用できないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 05:55:09168ブラウズ

Why Don't C  11 In-Class Initializers Allow Parentheses?

クラス初期化子のあいまいさ: 中括弧と等号の役割

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。