微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否允许在 C++ 中自行移动对象?

如何解决是否允许在 C++ 中自行移动对象?

对象(特别是 std 类的)是否允许自移动或它是未定义的行为?

举个例子:

#include <iostream>
#include <string>

int main()
{
    std::string s("123");
    s = std::move(s);
    std::cout << s;
}

在 gcc/clang 中,程序不打印任何内容,因此在移动过程中会丢失 s 字符串: https://gcc.godbolt.org/z/xqTWKfMxM

但在 MSVC 中它工作正常。

解决方法

来自cpp ref

此外,使用 xvalue 参数调用的标准库函数可能假定参数是对对象的唯一引用;如果它是从带有 std::move 的左值构造的,则不进行别名检查。 但是,标准库类型的自移动赋值保证将对象置于有效(但通常未指定)状态

std::vector<int> v = {2,3,3};
v = std::move(v); // the value of v is unspecified

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。