为什么将此变量视为左值?

时间:2019-10-07 20:26:42

标签: c++ c++11

考虑此代码

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构造函数吗?

0 个答案:

没有答案