在[dcl.init]/17.6中,明确写道对于括号初始化的情况,会发生复制省略:
如果初始化表达式是prvalue,并且源类型的cv-unqualified版本与目标类相同,则使用初始化表达式来初始化目标对象。例如:T x = T(T(T()));调用T的默认构造函数来初始化x。
但是,在列表初始化的情况下,上述段落不适用,我没有找到类似的内容。请参见[dcl.init.list]。
所以根据C++17标准,为什么在这种情况下
如果初始化表达式是prvalue,并且源类型的cv-unqualified版本与目标类相同,则使用初始化表达式来初始化目标对象。例如:T x = T(T(T()));调用T的默认构造函数来初始化x。
但是,在列表初始化的情况下,上述段落不适用,我没有找到类似的内容。请参见[dcl.init.list]。
所以根据C++17标准,为什么在这种情况下
T x{T(T())};
会发生复制省略。