我的理解是,当一个基本数据类型被 move 时,它总是会执行一个拷贝。
例如,您永远不能从 int
move ,并且没有指定原始 int
值:
#include <iostream>
int main() {
int x = 100;
int y{std::move(x)};
std::cout << x << " " << y; //always prints "100 100"
}
这是否意味着用户定义类型中的基本数据类型也是如此?
#include <iostream>
#include <vector>
struct Foo{
int i = 100;
std::vector<int> vec={1,2,3,4,5}; //something that probably will have an invariant
};
int main() {
Foo x;
Foo y{std::move(x)};
std::cout << x.i << " " << y.i; //always print "100 100"?
}
关于在 move 后保留这些基本类型值,标准怎么说?
最佳答案
编译器生成的特殊成员函数被指定为基本上对类的每个成员(和基类)进行相应的操作。
所以您的struct Foo
的i
将表现得像一个被移出的int
。 vector
也是如此。
关于c++ - 隐式 move 方法是否始终保留基本数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39704648/