【发布时间】:2021-08-26 10:38:43
【问题描述】:
我是移动语义的新手。
当我运行以下代码时:
std::string h{"move"};
auto r = std::move(h);
std::cout << h << std::endl;
std::cout << r << std::endl;
我得到了预期的结果:
{empty line}
move
但是当我运行这个时:
std::string h{"move"};
auto&& r = std::move(h);
std::cout << h << std::endl;
std::cout << r << std::endl;
虽然我希望得到与上面相同的输出,但我得到了输出:
move
move
为什么在这种情况下没有调用移动构造函数,并且值被设置为某个未指定的值?
【问题讨论】:
-
r是一个引用,这意味着它引用了h。这个例子中只有一个物体,你认为移动会发生在哪里?
标签: c++ c++11 move move-semantics rvalue-reference