ホームページ >バックエンド開発 >C++ >C のクラス データ メンバーに対して直接初期化構文が禁止されているのはなぜですか?

C のクラス データ メンバーに対して直接初期化構文が禁止されているのはなぜですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-17 02:08:03248ブラウズ

Why is Direct Initialization Syntax Forbidden for Class Data Members in C  ?

クラス データ メンバーに対して直接初期化構文が禁止されている理由

C クラス データ メンバーは、直接初期化構文 (式-リスト) 潜在的な解析のあいまいさのため。これは、次の例で明らかです。

class test {
    private:
        int s(3); // Compiler error
};

コンパイラでエラーが発生します:

  • "expected identifier before numeric constant"
  • "expected ',' or数値定数の前に「...」

C 標準に従って、データ メンバーは次の構文を使用してのみ初期化できます:

  • 代入の初期化: =Initializer-clause
  • Brace 初期化: {Initializer-list }

制限の理由

曖昧さを避けるために、クラス データ メンバーの直接初期化構文は意図的に省略されました。次の宣言の解析は困難になる可能性があります:

struct S {
    int i(x); // data member with initializer?
    static int x;
};

struct T {
    int i(x); // member function declaration?
    typedef int x;
};

直接初期化構文が許可されている場合、int i(x) が初期化子を持つデータ メンバーを表すかメンバー関数宣言を表すかが不明瞭になります。このあいまいさはテンプレートにも影響します。

この解析問題を解決するために、C 標準委員会はクラス データ メンバーの直接初期化構文を禁止し、関数宣言とローカル変数用に予約することを決定しました。

以上がC のクラス データ メンバーに対して直接初期化構文が禁止されているのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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