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

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

DDD
发布: 2024-12-21 13:50:12
原创
263 人浏览过

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板