gpt4 book ai didi

c++ - 交换 union 的正确方法?

转载 作者:太空狗 更新时间:2023-10-29 20:00:38 25 4
gpt4 key购买 nike

我有一个类(class),其中有一个 union 作为其成员之一。我也是 copy/swap idiom 的忠实粉丝.我突然想到,似乎没有任何正确的(在标准意义上)交换 union !

这是我能想到的最好的:

char tmp[sizeof(U)];
memcpy(tmp, &u1, sizeof(U));
memcpy(&u1, &u2, sizeof(U));
memcpy(&u2, tmp, sizeof(U));

因为 union (至少在 c++03 中)要求所有成员都是 POD,所以我不明白为什么这行不通。但它只是感觉不对。有没有更正确的交换 union 的方法?它似乎几乎被忽略了。

大家怎么看?

编辑:

好吧,看到给出的解决方案后我觉得有点傻:-)。我注销了 std::swap 和赋值等传统解决方案,因为当我第一次编写代码时, union 是匿名 union 。在当前版本的代码中, union 不再是匿名的,传统的解决方案似乎工作得很好。谢谢。

最佳答案

简单地:

#include <algorithm>
std::swap(u1, u2);

union 体都是可复制构造和可赋值的,所以没有问题。

关于c++ - 交换 union 的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5652071/

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