类初始化器中的歧义:大括号和等于的作用
在 C 11 中,类内成员初始化器只能使用 curly 定义大括号 ({}) 或等号 (=)。此限制提出了一个问题:为什么不允许使用括号来实现此目的。
此限制的一个主要原因在于可能存在语法歧义。考虑以下类:
class BadTimes { public: struct Overloaded; int Overloaded; // Data member int confusing(Overloaded); // Function declaration };
如果初始化器允许使用括号,则行“intfused(Overloaded);”可能会含糊不清。如果初始化器使用括号,它可以被解释为函数声明(如上所示)或成员变量初始化:
int confusing{Overloaded};
为了消除这种歧义,需要花括号或等号。这确保了成员变量初始值设定项和函数声明之间不会混淆:
class BadTimes { public: struct Overloaded; int Overloaded; int confusing{Overloaded}; // Member variable initialized with Overloaded };
以上是为什么 C 11 类内初始值设定项不允许使用括号?的详细内容。更多信息请关注PHP中文网其他相关文章!