在 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中文网其他相关文章!