7co*_*ows 23 c++ initializer curly-braces c++11
类内初始值设定项(C++ 11特性)必须用花括号括起来或跟在=符号后面.它们可能未在括号内指定.
这是什么原因?
tem*_*def 37
我不是100%肯定这一点,但这可能是为了防止语法模糊.例如,请考虑以下类:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing(Overloaded); // <-- This line
};
Run Code Online (Sandbox Code Playgroud)
指示的线是什么意思?如上所述,这是一个名为成员函数的声明,confusing
它接受一个类型的对象作为参数Overloaded
(其名称未在函数声明中指定)并返回一个int
.如果C++ 11允许初始化器使用括号,那么这将是不明确的,因为它也可以是int
名为的类型成员的定义,该成员confusing
被初始化为数据成员的值Overloaded
.(这与最令人烦恼的解析的当前问题有关.)
通过要求花括号,这种歧义被删除:
class BadTimes {
struct Overloaded;
int Overloaded; // Legal, but a very strange idea.
int confusing{Overloaded}; // <-- This line
};
Run Code Online (Sandbox Code Playgroud)
现在,很明显confusing
实际上是int
初始化的值Overloaded
,因为没有办法将其作为函数声明来读取.
希望这可以帮助!
归档时间: |
|
查看次数: |
1058 次 |
最近记录: |