C ++ 11移动构造函数和赋值运算符

时间:2013-11-28 16:20:57

标签: c++ move

关于移动语义的隐式用法的一个相对简单的问题,

当我们有

A func();

以下代码:

A a;

a = func();

将调用A的默认构造函数,然后调用A的复制构造函数来创建/返回临时,然后复制赋值运算符将其分配给对象a。

如果已经为A定义了移动构造函数和移动赋值,那么在最后一个语句中实际调用什么来创建临时/ rvalue?它是复制构造函数,后跟移动赋值吗?

1 个答案:

答案 0 :(得分:2)

使用move-constructor创建临时文件,如果有,则返回值可以视为 rvalue ,否则为copy-constructor。如果该函数适用于返回值优化,则可能会省略这一点。

如果有移动赋值运算符,则使用移动赋值运算符分配给a,否则为复制赋值运算符。这是因为临时是 rvalue