考虑到这个准则
class T { public: T(T& x) = delete; T(T&& x) {} }; void foo(T&& b) { T y(b); }
我以为是b;这是一个通过声明的右值;似乎用法应该传递到foo()中T的move构造函数中。
相反我收到一个编译错误报告,T&已被删除。
将其替换为
void foo(T&& c) { T y(std::move(c)); }
取得预期的成功;但显然,人们不想在代码中到处乱扔std::move。 指责VisualStudio很有诱惑力——在这种情况下,我怀疑是我的理解错了。有人能解释一下为什么不使用移动构造函数吗?