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

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

Susan Sarandon
リリース: 2024-12-20 05:55:09
オリジナル
166 人が閲覧しました

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート