【发布时间】:2016-10-31 20:24:52
【问题描述】:
我有这个C++测试代码sn-p,
#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() 中的右值引用?
【问题讨论】:
-
虽然
_x的类型是“对 std::vector的右值引用”,但它仍然是一个左值,因为它有一个名称。您可能希望在构造函数中多次使用它,因此除非您明确想要,否则不应在第一次使用时将其移走。
标签: c++ rvalue-reference