考虑此代码
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他们的代码。 责怪视觉工作室是很诱人的-在这种情况下,我怀疑这是我的理解是错误的。有人可以解释为什么不使用move构造函数吗?