考慮這個簡單的類右值與拷貝操作
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