如何解决为什么使用 std::move 并分配给 rvalue 不会窃取内部内容?
众所周知,如果与非基本类型一起使用,c++ std::move 会窃取内部内容。我突然有一个脑波,如果将左值移动到右值会发生什么。我最初认为它仍然会窃取内容。但是什么也没发生,a 的字符串还在。这是由忽略移动构造函数引起的吗?但我认为编译器认为命名的右值是左值,对吗?
int main()
{
string a="4";
string&& c = move(a);
cout<<a<<endl;
}
解决方法
这是因为 c
被声明为对 a 的引用(右值引用)。它不是一个不同的字符串。为了“静止”(即调用移动构造函数),需要将 c
声明为 string
。然后,字符串 a 被“移动”到字符串 c:
int main()
{
string a="4";
string c = move(a);
cout<< "a :" <<a << ":" <<endl;
cout << "c :" << c << ":"<< endl;
}
输出为:
a ::
c :4:
不过,这段代码将右值移动到左值,这是它应该工作的方式。但是,听起来您正在尝试将左值移动到右值,但这不是您要做的。 c
是一个右值,但 move(a)
也是一个右值。 std::move()
将 a
转换为右值引用。将引用视为类似于指针的东西,它不是 string
。您不能将字符串移动或复制到它。它只是指字符串。无论如何,我不认为您可以将左值移动到右值。我想不出任何情况。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。