【发布时间】:2016-08-23 19:58:58
【问题描述】:
[class.conv.ctor]/2 中的示例包含以下初始化:
Z a3 = Z(1); // OK: direct initialization syntax used
这如何被视为直接初始化语法?
【问题讨论】:
-
您在标题中提出了一个问题,而在正文中提出了另一个问题。你应该问一个明确的问题。
-
你为什么这么坚持不澄清问题本身?您认为未来的读者是否希望通过所有 cmets 来了解您的“问题”?此外,您的“解释”充满了错误的前提。
a3的初始化不是直接初始化这一事实不会使代码格式错误,正如已经向您解释过无数次的那样。 -
@WakeupBrazil 已经在两个答案和一些 cmets 中反复解释。真不知道还能加什么。
-
该短语中的“唯一”指的是使用显式构造函数初始化值的子表达式。 not 是说 only 直接初始化可以在使用显式构造函数的 full-expression 中使用。使用显式构造函数的子表达式是
Z(1)。在包含它的完整表达式中使用显式构造函数的此子表达式的存在,Z a3 = Z(1);并不禁止在完整表达式的其他部分中进行其他类型的构造。 ... -
Z1 a3 =部分是完整表达式的不同部分。它不使用显式构造函数。它使用显式构造函数的result,这不是一回事。就像Z b(1); Z c = b;在构造c时不使用显式构造函数一样,表达式Z a3 = x;where X is anything 导致Z不使用显式构造函数来创建@987654331 @。它使用复制构造。
标签: c++ initialization language-lawyer c++17