我对std::move()
在下面的代码中使用感到困惑:
如果我在 (2) 处取消注释行,输出将是:1 2 3
但如果我在 (1) 处取消注释行,输出将什么都不是,这意味着std::vector
调用了 move 构造函数!
为什么我们必须再次调用std::move
at (1) 才能调用移动构造函数std::vector
?
我的理解是std::move
获取r-value
它的参数,为什么我们必须在(1)处 r-value
获取?r-value
我认为_v = rv;
(2)处的这一行更合乎逻辑,应该使std::vector
移动构造函数被调用,std::move
因为rv
它本身r-value
首先是引用。
template <class T>
class A
{
public:
void set(std::vector<T> & lv)
{
}
void set(std::vector<T> && rv)
{
//_v = std::move(rv); (1)
//_v = rv; (2)
}
private:
std::vector<T> _v;
};
int main()
{
std::vector<int> vec{1,2,3};
A<int> a;
a.set(std::move(vec));
for(auto &item : vec)
cout << item << " ";
cout << endl;
return 0;
}