【发布时间】:2016-10-05 18:01:25
【问题描述】:
我知道这是一个非常基本,甚至可能令人尴尬的问题,但我无法理解这一点。如果我 std::move 从堆栈上的某个对象到另一个对象,当原始对象超出范围时,另一个对象是否仍然可以使用?
#include <iostream>
#include <string>
int
main(int argc, char* argv[])
{
std::string outer_scope;
{
std::string inner_scope = "candy";
outer_scope = std::move(inner_scope);
}
std::cout << outer_scope << std::endl;
return 0;
}
outer_scope 在我尝试打印的地方仍然有效吗?
【问题讨论】:
-
当然可以。移动构造函数/赋值的全部目的是从临时对象中窃取内容——如果这样构造的对象在相关临时对象死亡后无法使用,那将是非常无用的。
-
如果你移动了某个东西,那么这意味着你移动它的东西现在处于控制之中,而原来控制的东西不再控制。
-
当然是
-
@πάνταῥεῖ 嗯?该代码对我来说看起来非常简单且没有争议。在您看来,它违反了哪条规则?
-
@IgorTandetnik 对不起,我误解了反之亦然的行动。不过,有一个骗局。
标签: c++ c++11 move-semantics