无法将左值绑定到右值引用

Can't bind lvalue to rvalue reference

我有这个 C++ 测试代码片段,

#include <vector>

class A {
        std::vector<int> x;
public:
        A(std::vector<int>&& _x) : x(_x) {}
};

class B {
        A a;
public:
        B(std::vector<int>&& _x) : a(/*move(*/_x/*)*/) {}
};

我将 _x 作为右值引用传递给 B,但在传递给 A 的构造函数时它被转换为左值,我必须使用 std::move() 来实现它工作。我的问题是为什么 _x 是左值而不是 a()?

中的右值引用

任何有名字的东西都是左值引用。您必须对参数使用 std::move 才能将它们作为右值引用传递。

引用自WIKI

出于安全原因,施加了一些限制。 命名变量永远不会被视为右值,即使它被声明为右值。要获得右值,应使用函数模板 std::move()。右值引用也只能在特定情况下修改,主要用于移动构造函数。