1
19
正如Nicol Bolas指出的,这个答案的原始版本是不正确的:在编写本文时,cppreference错误地记录了在列表初始化中考虑构造函数的顺序。下面是使用规则的答案,因为它们存在于标准的N4140草案中,这非常接近于官方的C++ 14标准。 原答案的正文仍包括在内,以供记录。 更新的答案
gcc是正确的。 n4140[dcl.init.list]/1
你在那里使用列表初始化
[dcl.init.list]/3:
查看目前的列表:
然后点击[dcl.init.list]/3.4:
因此,只考虑复制构造函数 之后 初始化器在重载解析的第二阶段列出构造函数。此处应使用初始值设定项列表构造函数。 值得注意的是,[over.match.list]然后继续:
在[dcl.init.list]/3之后。 处理单元素列表初始化:
这就解释了cppreference在哪里得到了用于单元素列表初始化的特例,尽管它们的顺序比应该的高。 原始答案
从 cppreference :
|
2
6
让我们来看看C++ 14规范中关于列表初始化的内容。[dcl.init.list]3有一系列要应用的规则:
3.2不适用,因为列表不是空的。
3.4确实适用,因为
简而言之,海合会是正确的 是错误的 .
没有什么
关于这个。它有一个新的第3.1节,对单值列表有特殊的措辞,但是
.
|
Robert E. Brown · 嵌套类的嵌套类的访问权限 6 年前 |
YSC · 通过成员指针访问受保护的成员:这是黑客行为吗? 6 年前 |
Swift - Friday Pie · 交换数学运算的阶 6 年前 |
Acorn · Linux内核的\uu is\u constexpr宏 6 年前 |
Acorn · 检测宏中的整数常量表达式 6 年前 |
Petr Skocik · 兼容类型并忽略C类型系统中的顶级限定符 6 年前 |