类内初始化器:为什么括号或等于限制?
在 C 11 中,类内初始化器必须符合特定语法:它们必须括在花括号中或直接跟在等号 (=) 后面。但是,不允许使用括号。理解此要求背后的基本原理至关重要。
防止语法歧义
该限制源于潜在的语法歧义。考虑以下类:
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing(Overloaded); };
如果类内初始值设定项允许使用括号,则第 4 行是不明确的。它可能被解释为名为“confusing”的成员函数的声明,该函数接受“Overloaded”类型的参数,或者被解释为初始化为数据成员“Overloaded”的值的“int”成员变量“confusing”的定义。
括号清晰
通过要求类内初始化器使用大括号,C 11消除了这种歧义。修改前面的示例:
class AmbiguousSyntax { struct Overloaded; int Overloaded; int confusing{Overloaded}; };
现在,很明显“confusing”是一个初始化为“Overloaded”值的整数成员,因为函数参数不允许使用括号。
C 11 中的这种语法限制确保了函数声明和成员变量声明/初始化之间的明确区分,从而增强了代码可读性并避免了解释上的混乱类内初始化器。
以上是为什么 C 11 类内初始化器不能使用括号?的详细内容。更多信息请关注PHP中文网其他相关文章!