为什么禁止类数据成员直接初始化语法
在 C 中,类数据成员不能使用 ( ) 大括号括起来的语法。考虑以下代码:
class test { public: void fun() { int a(3); std::cout << a << '\n'; } private: int s(3); // Compiler error };
编译失败,并出现以下错误:
那么,为什么有这个限制?
根据早期的 C 提案和标准讨论,该禁令的目的是防止解析歧义 。如果允许大括号括起来的初始化,编译器可能会在以下情况下误解声明:
struct S { int i(x); // data member with initializer // Other code static int x; };
这里,不清楚 i(x) 是数据成员初始值设定项还是成员函数声明,因为两者都遵循相同的语法。
为了解决这种歧义,C 选择了以下限制:
此决定可以避免解析问题并确保代码的清晰度。
以上是为什么不能使用大括号括起来的语法来初始化类数据成员?的详细内容。更多信息请关注PHP中文网其他相关文章!