我有一個類,移動任務被明確刪除,因爲對象不應該是可移動的。但是,如果我分配到使用這個RVO類的一個實例,編譯器給我的錯誤:編譯器不會使用複製分配而是移動?
main.cpp:12:16: note: candidate function has been explicitly deleted
也編譯器提現有的拷貝賦值運算符,但不使用它。
這裏是我的代碼(或(不)運行例如here):
class foo {
public:
foo() {}
foo(foo const& r) {}
foo(foo&&) = delete;
foo const& operator=(foo const& r) { return *this; }
foo const& operator=(foo&& r) = delete;
};
int main(int argc, char **argv) {
foo bar;
bar = foo();
return 0;
}
我發現了一個非常類似的帖子here。
我知道我可以通過使用臨時避免這種情況。我想知道爲什麼每個編譯器(我用gcc,clang和vs2013測試過)不能直接調用現有的拷貝任務?有什麼我失蹤?
此舉賦值運算符是一個更好的匹配。在考慮它被刪除之前發生這種情況。 – chris
刪除的函數參與重載解析。 – 101010
只要不刪除移動assingment,一切都會很好。不動的存在會抑制默認值。 – SergeyA