<分区>
这会编译并调用复制构造函数:
struct foo {
foo() = default;
foo(const foo&) { cout << "copy ctor!" << endl; }
//foo(const foo&&) = delete;
};
int main() {
foo a;
foo b(move(a));
这不编译:
struct foo {
foo() = default;
foo(const foo&) { cout << "copy ctor!" << endl; }
foo(const foo&&) = delete;
};
int main() {
foo a;
foo b(move(a));
我知道在第一种情况下为什么调用拷贝 - 没有生成 move 构造函数。但是为什么第二个 snipper 不能编译呢?它认为它会再次调用复制器。
here是在线编译器的链接