考虑这个简单的类右值与拷贝操作
class Foo
{
public:
Foo() = default;
Foo(const Foo &) = default;
Foo & operator=(const Foo & rhs)
{
return *this;
}
Foo & operator=(Foo && rhs) = delete;
};
Foo getFoo()
{
Foo f;
return f;
}
int main()
{
Foo f;
Foo & rf = f;
rf = getFoo(); // Use of deleted move assignment.
return 0;
}
当我编译上面的例子中,我得到error: use of deleted function 'Foo& Foo::operator=(Foo&&)'
如果只提供拷贝赋值,所有参数类别选择它(只要它通过值或作为const引用的参数,因为rvalues可以绑定到const引用),这使得副本分配成为m的后备当移动不可用时
为什么编译器后备时复制分配时常量左值引用可以绑定到右值和const Foo & f = getFoo();
工程。
编译器 - gcc 4.7.2。
难道你不是指“移动构造函数*可用*”吗? – Quentin
@Quentin你是对的,谢谢!编辑。 – sergej