代码之家  ›  专栏  ›  技术社区  ›  UKMonkey

为什么这个变量被认为是左值?[重复]

  •  0
  • UKMonkey  · 技术社区  · 6 年前

    考虑到这个准则

    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很有诱惑力——在这种情况下,我怀疑是我的理解错了。有人能解释一下为什么不使用移动构造函数吗?

    0 回复  |  直到 6 年前