Home > Article > Backend Development > Can Class Data Members Be Initialized Directly in C ?
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.
The above is the detailed content of Can Class Data Members Be Initialized Directly in C ?. For more information, please follow other related articles on the PHP Chinese website!