为什么不调用构造函数?

时间:2015-10-29 04:13:36

标签: c++ move-constructor

以下是代码:http://coliru.stacked-crooked.com/a/f7731b48747c61a9

#include <iostream>

struct A{
    A(const A&){ std::cout << "A(const A&)" << std::endl;}
    A(const A&&){ std::cout << "A(const A&&)" << std::endl;}
    A(){ }
};

A foo(){
    return *new A;
}
int main()
{
    A a;
    A c(foo());
}

因为,我将c的构造函数参数传递给临时对象,我期望调用移动构造函数。但是复制构造函数是。为什么?

1 个答案:

答案 0 :(得分:4)

由于foo返回非常量 rvalue,因此无法绑定到const-rvalue引用。复制构造函数是唯一剩余的可行重载。

比复制构造函数更好的重载构造函数是:

A(A&&);

此外,根据复制省略规则(例如see herehere)可以省略构造函数(复制或移动)。)