繁体   English   中英

std::move 不为右值引用移动

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM