Why Class Data Member Direct Initialization Syntax is Forbidden
In C , class data members cannot be initialized using the ( ) brace-enclosed syntax. Consider the following code:
class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error };
Compilation fails with errors like:
So, why this limitation?
According to early C proposals and standard discussions, the prohibition aims to prevent parsing ambiguities. If brace-enclosed initialization were allowed, the compiler could potentially misinterpret declarations in situations like:
struct S { int i(x); // data member with initializer // Other code static int x; };
Here, it's unclear if i(x) is a data member initializer or a member function declaration, as both follow the same syntax.
To address this ambiguity, C opted for the following restrictions:
This decision avoids parsing issues and ensures clarity in code.
The above is the detailed content of Why Can\'t Class Data Members Be Initialized Using Brace-Enclosed Syntax?. For more information, please follow other related articles on the PHP Chinese website!