初学者问题。
在下面的代码中,我本来期望v2 [0]=1
也会改变v1
的值,但事实上并没有。
push_back
自C++11(ref)起似乎接受T&&
,而且std::move
等价于static_cast<T&&>(t);
,详见this answer。此外,std::vector ::operator[]返回引用(ref)。
所以我认为v2.push_back(std::move(v1[0]));
会将一个引用赋给相同的值。
我错过了什么?我原以为输出结果是1
和1
。
#include <iostream>
#include <vector>
int main(){
std::vector<int> v1{5}, v2;
v2.push_back(std::move(v1[0]));
v2[0] = 1;
std::cout << v1[0] << '\n';
std::cout << v2[0] << '\n';
// output:
// 5
// 1
}
vector
存储的是副本,而不是引用。 - ALX23zv1[0]
在移动后具有未指定但有效的状态。不,int类型不会受到“移动”的影响。 - eerorika