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 標準ではクラスに次の構文のみを許可します。データ メンバーの初期化:
この解決策により、明確さが保証され、次のような場合の誤解の可能性が回避されます。宣言はオブジェクト宣言と関数宣言の両方に似ている可能性があります。
以上がクラスデータメンバーはCで直接初期化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。