"复制初始化上下文中的默认初始化"在C++中意味着什么?

led*_*ter 11 c++ overloading initialization c++14 c++17

例如,我想我理解直接初始化(vs copy-)的上下文中的列表初始化 - 基本上是int x{}vs.int x = {}

但是在cppreference上我发现了这个:

当类类型的对象从相同或派生类类型的对象进行复制初始化,或者在复制初始化上下文中进行默认初始化时,候选函数都是转换正在初始化的类的构造函数.参数列表是初始化程序的表达式.

我想我明白为什么候选人为第一种情况转换构造函数,但不是第二种情况.我的意思是,我不能写出类似的内容MyClass x = MyClass,并且= MyClass()会进行值初始化,并且= MyClass(args...)会直接启动.

即使存在这样的构造,我也不明白为什么临时MyClass对象'构造'应该特别包括所有转换构造函数.

(x正如我所看到的那样,并不是在这里讨论的东西,因为它绝对是复制构造的,而不是默认构造的.)

所以我想我对这里的条款感到困惑.

xsk*_*xzr 6

P0398R0中增加了这一措辞,旨在描述以下情况:

Z c = {};
Run Code Online (Sandbox Code Playgroud)

对于非聚合Z.

  • 基本上,从`{}`复制列表初始化的所有类似情况. (2认同)