首页 >后端开发 >C++ >为什么 C 11 类内初始化器不能使用括号?

为什么 C 11 类内初始化器不能使用括号?

DDD
DDD原创
2024-12-21 13:50:12265浏览

Why Can't C  11 In-Class Initializers Use Parentheses?

类内初始化器:为什么括号或等于限制?

在 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn