【发布时间】:2017-11-27 20:54:30
【问题描述】:
在以下(借用)示例中,在我的环境中,从不调用移动构造函数:
#include <iostream>
class MyClass {
public:
MyClass()
{
std::cout << "default constructor\n";
}
MyClass(MyClass& a)
{
std::cout << "copy constructor\n";
}
MyClass(MyClass&& b)
{
std::cout << "move constructor\n";
}
};
void test(MyClass&& temp)
{
MyClass a(MyClass{}); // calls MOVE constructor as expected
MyClass b(temp); // calls COPY constructor...
}
int main()
{
test(MyClass{});
return 0;
}
我的输出是: 默认构造函数 默认构造函数 复制构造函数
我使用 XCode 9.1 版,不应该在右值引用上调用移动构造函数吗?我在这里错过了什么?
约翰。
【问题讨论】:
-
MyClass&& temp实际上是您调用MyClass b(temp);时的左值(因为它有名称);为了调用右值构造函数,您需要 move 它 (MyClass b(std::move(temp));)
标签: c++ move-constructor