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?你能帮我解释一下吗?谢谢你。
我以为在 move(c) 到 d 之后,c 会是空的,
你的期望被误传了。
为什么它的值仍然是 2 ?
基本类型没有移动构造函数。你只是复制了一份。复制不会修改源对象。
对于类类型,假设移动构造函数究竟做了什么是不安全的,特别是源对象处于什么状态。不一定保证它是“空的”。请参阅该类的文档以了解它的作用。如果没有文档,或者文档没有提供任何保证,那么您就不能对源对象的状态做出任何假设。