我有一个类,移动任务被明确删除,因为对象不应该是可移动的。但是,如果我分配到使用这个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