gpt4 book ai didi

c++ - 具有默认移动构造函数的复合类的移动后使用 POD 部分

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:16:55 32 4
gpt4 key购买 nike

假设我们有一个包含非 POD 和 POD 部分的类。移动构造函数和移动赋值是默认的。此类实例的 POD 部分在移动后可以安全使用吗?

#include <string>
struct A {
std::string s = "foo";
int i = 42;
};
A a;
A b = std::move(a);
int j = a.i; //OK or UB?

是否保证按元素移动/复制(所以这没问题),或者一致的实现是否可以改变 POD 部分(例如,通过与默认构造的对象交换)?

最佳答案

默认的 move ctor 只是对每个成员(和基础)进行移动。

移动原始类型只是复制它。

所以这在那个级别上定义得很好。

然而,从语义上讲,这是一个错误:除了“有效”之外,您应该设法避免依赖移出对象状态的细节。

关于c++ - 具有默认移动构造函数的复合类的移动后使用 POD 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293987/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com