[英]std::move does not move for rvalue reference
我是移动语义的新手。
当我运行以下代码时:
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;
虽然我期望与上面相同的 output,但我得到了 output:
move
move
为什么在这种情况下不调用移动构造函数,并且将值设置为某个未指定的值?
std::move
本身什么也不做,只是将其参数转换为T &&
。
这是由于您在第一个示例中将std::string &&
分配给r
的事实,从而移动了h
的数据。
在第二种情况下,您将std::string &&
分配给std::string &&
,即引用。 它是左值还是右值引用在这里并不重要。 事实是不需要创建std::string
object ,因此不会移动h
的数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.