3 回答
TA贡献1847条经验 获得超11个赞
A a = A(5)
a
使用初始化器表达式作为参数调用所选函数;如果函数是构造函数,则调用初始化目标类型的cv非限定版本的临时函数。临时值是一个prvalue。然后,根据上述规则,调用的结果(是构造函数用例的临时结果)被用于引导初始化副本初始化的目标对象。 在某些情况下,允许实现通过将中间结果直接构造到被初始化的对象来消除这种直接初始化过程中固有的复制;参见12.2,12.8。.
A(5)
a
当满足某些条件时,即使对象的复制/移动构造函数和/或析构函数有副作用,也允许实现省略类对象的复制/移动构造。
在这种情况下,实现将省略的复制/移动操作的源和目标视为引用同一对象的两种不同方式,并且该对象的销毁发生在如果不进行优化就会销毁这两个对象的晚些时候。复制/移动操作的简化,称为 复制省略,允许在下列情况下(可合并以消除多份副本): [...]
当没有绑定到引用(12.2)的临时类对象被复制/移动到具有相同cv-非限定类型的类对象时
,可以通过将临时对象直接构造到省略的复制/移动的目标中来省略复制/移动操作。
A a = A(5)
:
编译器会看到带有复制初始化的声明。 这个 A(int)
构造函数以初始化临时对象。 因为临时对象是 不
绑定到引用,并且它确实具有相同的类型。 A
作为复制初始化表达式中的目标类型,编译器可以直接将对象构造为 a
,临时的
TA贡献1848条经验 获得超6个赞
A a = A(5);
A a(5);
a
函数符号类型转换(5.2.3)可用于创建其类型的新对象。[注意:语法看起来像构造函数的显式调用。-尾注]
- 3 回答
- 0 关注
- 333 浏览
添加回答
举报