我有这个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()
才能使其工作。我的问题是,为什么a()
中的_x是左值而不是右值引用?
_x
的类型是“指向 std::vector<int> 的右值引用”,但它仍然是一个左值,因为它有一个名称。在构造函数中可能需要多次使用它,因此除非你明确想要这样做,否则在第一次使用时不应该将其移动。 - Corristo