Wak*_*zil 5 c++ initialization language-lawyer c++17
[class.conv.ctor]/2中的示例包含以下初始化:
Z a3 = Z(1); // OK: direct initialization syntax used
Run Code Online (Sandbox Code Playgroud)
这怎么被认为是直接初始化语法?
Z(1)将直接初始化一个prvalue.然后,prvalue将用于初始化对象.根据保证省略的规则,没有临时跟踪副本.prvalue直接初始化对象.因此,Z a3 = Z(1);是完全等同于Z a3(1);.
在pre-C++ 17中,这将执行prvalue临时的直接初始化,然后是临时的(几乎肯定省略的)副本到对象中a3.无论副本是否被省略,prvalue的初始化都是通过直接初始化来完成的.初始化a3是通过复制初始化,但这是通过复制构造函数,而不是explicit.