首页 > 解决方案 > C++:用整数移动语义

问题描述

int c = 2;
int d = std::move(c);
std::cout << "c is: " << c << std::endl;
std::cout << "d is: " << d << std::endl;

此代码输出:

c是:2

d 是:2

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

标签: c++c++11move-semantics

解决方案


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

你的期望被误传了。

为什么它的值仍然是 2 ?

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


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


推荐阅读