C++:用整数移动语义

MrM*_*ami 1 c++ move-semantics c++11

int c = 2;
int d = std::move(c);
std::cout << "c is: " << c << std::endl;
std::cout << "d is: " << d << std::endl;
Run Code Online (Sandbox Code Playgroud)

此代码输出:

c是:2

d 是:2

我认为在 move(c) 到 d 之后,c 将是空的,为什么它的值仍然是 2?你能帮我解释一下吗?谢谢你。

eer*_*ika 5

我以为在 move(c) 到 d 之后,c 会是空的,

你的期望被误传了。

为什么它的值仍然是 2 ?

基本类型没有移动构造函数。你只是复制了一份。复制不会修改源对象。


对于类类型,假设移动构造函数究竟做了什么是不安全的,特别是源对象处于什么状态。不一定保证它是“空的”。请参阅该类的文档以了解它的作用。如果没有文档,或者文档没有提供任何保证,那么您就不能对源对象的状态做出任何假设。