【发布时间】:2014-08-23 19:36:00
【问题描述】:
我正在阅读 C++11,我有以下问题。假设我有以下粗略代码
class foo
{
public:
foo()
{std::cout << "Regular constructor \n";}
foo(const foo& a)
{std::cout << "Copy constructor \n";}
foo& operator=(const foo& a)
{std::cout << "Copy Assignment operator \n";}
foo(foo&& a)
{
std::cout << "Move constructor \n";
}
foo& operator=(foo&& a)
{std::cout << "Move Assignment operator \n";}
int a;
};
foo myfunction()
{
foo d;
d.a =120;
return d;
}
现在如果我做这样的事情
foo a = myfunction();
我知道将调用移动构造函数,因为 myfunction() 返回一个右值类型。 现在我注意到,如果我从类中删除移动构造函数代码,则会调用复制构造函数。我的问题是为什么会这样?如果 myfunction 的返回类型是 foo&& 并且复制构造函数接受 foo& 那么为什么要调用复制构造函数?我正在使用 Vs2012。
【问题讨论】:
标签: c++ c++11 move-constructor