In C++, class data members cannot be initialized using the direct initialization syntax, (), as seen in the following example:
#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; }
The compilation fails with errors:
11 9 [Error] expected identifier before numeric constant 11 9 [Error] expected ',' or '...' before numeric constant
Why is this the case?
The C++ standard explicitly prohibits this syntax for class data member initialization. Early proposals for the feature's introduction cited parsing problems as the reason.
Consider this ambiguous example:
struct S { int i(x); // data member with initializer or... // ... static int x; int i(y); // member function declaration // ... typedef int y; };
The standard proposes a solution:
To eliminate ambiguity, the C++ standard allows only the following syntax for class data member initialization:
This resolution ensures clarity and avoids the potential for misunderstanding in cases where a declaration could resemble both an object and a function declaration.
以上是類別資料成員可以直接在C中初始化嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!