在以下C ++ 11/14代码段中,我使用std::move
将内部范围中向量Y
的内容“移动”到向量X
在外部范围:
void foo() {
vector<int> X(10);
...
for (...) {
vector<int> Y(100);
...
X = std::move(Y);
}
...Safe to use X here which contains Y's last content?
}
每次迭代时,在循环的顶部/底部调用 Y
的构造函数/析构函数。由于内容已从Y
“移出”到X
,因此这些内容在循环结束后仍然可行(现在存储在X
中)正确吗?
答案 0 :(得分:8)
是的,vector遵循值语义。
移动后,存储现在由外部矢量拥有。