在 C 中,类数据成员不能使用直接初始化语法 () 进行初始化,如下例所示:
#includeclass test { public: void fun() { int a(3); std::cout 编译失败并出现错误:
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标准只允许使用以下语法进行类数据成员初始化:
- =initializer-clause
- {initializer-list }
此解决方案确保清晰并避免在声明可能类似于对象和函数声明的情况下潜在的误解。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3