ホームページ  >  記事  >  バックエンド開発  >  クラスデータメンバーはCで直接初期化できますか?

クラスデータメンバーはCで直接初期化できますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-15 02:14:02346ブラウズ

Can Class Data Members Be Initialized Directly in C  ?

クラス データ メンバーは直接初期化できますか?

C では、次の例に示すように、クラス データ メンバーは直接初期化構文 () を使用して初期化できません。 :

#include <iostream>

class test {
public:
    void fun() {
        int a(3);
        std::cout << a << '\n';
    }
private:
    int s(3);    // Compiler error
};

int main() {
    test t;
    t.fun();
    return 0;
}

コンパイルは次のように失敗します。エラー:

11    9 [Error] expected identifier before numeric constant
11    9 [Error] expected ',' or '...' before numeric constant

なぜこれが当てはまるのですか?

C 標準では、クラス データ メンバーの初期化にこの構文を明示的に禁止しています。この機能の導入に関する初期の提案では、解析の問題が理由として挙げられていました。

次のあいまいな例を考えてみましょう:

struct S {
    int i(x); // data member with initializer or...
    // ...
    static int x;
    int i(y); // member function declaration
    // ...
    typedef int y;
};

標準では解決策が提案されています:

曖昧さを排除するために、C 標準ではクラスに次の構文のみを許可します。データ メンバーの初期化:

  • =Initializer-clause
  • {Initializer-list }

この解決策により、明確さが保証され、次のような場合の誤解の可能性が回避されます。宣言はオブジェクト宣言と関数宣言の両方に似ている可能性があります。

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

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