1
30
这似乎是一种语法分析的笨拙,有点类似于著名的 most vexing parse . 我怀疑发生了什么事: 如果你写信
编译器有两种解释语法的方法:
编译器将首选选项1。通过提供额外的大括号,可以执行完全大括号初始化并消除任何语法上的歧义。 |
2
14
C++ 14 brace elision rule 仅适用于子聚合初始化。 例如,类似这样的工作:
在这里,聚合的聚合可以在没有额外大括号的情况下进行列表初始化。
但是
也就是说,如果没有大括号省略规则,
到
列表初始化
如果没有大括号省略规则,则需要一组额外的大括号才能
|
3
8
如果没有双大括号,这个语句就是不明确的。考虑以下代码:
|
4
0
理论上
是一种语法糖:
如您所见,在第一个示例中,我似乎用值初始化数组,但实际上是用带括号的in it list进行聚合初始化。在第二种情况下,这一天很明显。所以这只是开始。 好吧,那为什么这不起作用呢?
好吧,简单地说-编译器无法区分您使用什么类型的语法来初始化数组。
此代码:
消除歧义。 资料来源: http://en.cppreference.com/w/cpp/language/aggregate_initialization |
5
-2
我来猜猜。
但那是冗长乏味的。为了得到转换到
我不能再为这个辩护了,但请注意
|
Peter VARGA · 初始化每个类成员时的性能问题? 6 年前 |
vbstb · 使用空初始值设定项列表直接初始化 6 年前 |
BobMorane · std::绑定到lambda:编译错误 6 年前 |
Stéphane · C++编译器如何处理这个初始值设定项列表? 6 年前 |
user16320 · C++对自定义类初始值设定项的混淆 6 年前 |