为什么类数据成员禁止使用直接初始化语法
C 类数据成员不能使用直接初始化语法(表达式-列表)由于潜在的解析歧义。这在提供的示例中很明显:
class test { private: int s(3); // Compiler error };
编译器引发错误:
根据 C 标准,数据成员可以只能使用以下语法进行初始化:
原因限制
类数据成员故意省略直接初始化语法以避免歧义。解析以下声明可能具有挑战性:
struct S { int i(x); // data member with initializer? static int x; }; struct T { int i(x); // member function declaration? typedef int x; };
如果允许直接初始化语法,则不清楚 int i(x) 是否表示带有初始值设定项的数据成员或成员函数声明。这种歧义也会影响模板。
为了解决这个解析问题,C 标准委员会决定禁止类数据成员的直接初始化语法,并将其保留用于函数声明和局部变量。
以上是为什么 C 中的类数据成员禁止直接初始化语法?的详细内容。更多信息请关注PHP中文网其他相关文章!