交换工会的正确方式
proper way to swap unions?
我有一个类,它的成员之一是union。我也是复制/交换习惯用法的忠实粉丝。我突然想到,似乎没有任何正确的(在标准的意义上)交换联合!
这是我能想到的最好的:
char tmp[sizeof(U)];
memcpy(tmp, &u1, sizeof(U));
memcpy(&u1, &u2, sizeof(U));
memcpy(&u2, tmp, sizeof(U));
既然联合(至少在c++03中)要求所有成员都是POD,我不明白为什么这不行。但是感觉不对。有没有更正确的方式来交换工会?这似乎几乎是被忽视的事情。
你们觉得怎么样?
编辑:好吧,看到给出的解决方案后,我觉得有点愚蠢:-)。我省略了传统的解决方案,比如std::swap
和赋值,因为当我第一次写代码时,联合是一个匿名联合。在当前版本的代码中,union不再是匿名的,传统的解决方案似乎可以很好地工作。谢谢。
简体:
#include <algorithm>
std::swap(u1, u2);
联合既可复制构造又可赋值,所以没有问题。
为什么不使用经典的交换方案呢?
U u1, u2;
// ...
U t = u1;
u1 = u2;
u2 = t;
相关文章:
- 如何在c++中为模板函数实例创建快捷方式
- 在c代码之间共享数据的最佳方式
- 在C++中将函数压缩为两种方式
- 以螺旋方式打印矩阵的程序.(工作不好)
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++嵌套if语句,基本货币交换
- 创建引用向量的优雅方式
- Constexpr替代了新的放置方式,可以让内存中的对象保持未初始化状态
- shell排序中的交换和比较
- 使用QQuickFramebufferObject时同步数据的最佳方式是什么
- 不同/较旧的处理器运行c++代码的方式是否不同
- 以原子方式交换指针与 nullptr
- 如何以通用方式交换两个值
- 矢量的一种交换方式是可能的
- MATLAB和C++之间最有效的数据交换方式
- 在 UNIX 进程之间交换中等量数据的最佳方式是什么?
- 在内存映射文件中交换字节的有效方式
- 如果需要,我将如何以编程方式访问或打开交换 edb 文件
- 有效的交换文件内容的方式
- 交换工会的正确方式