联合体在同一内存位置存储不同数据类型,仅当前赋值成员有效。定义如union Data{int i; float f; char str[4];};使用时data.i=10,则i有效,f和str未定义。

联合体(union)在C++中是一种特殊的数据类型,允许在同一个内存位置存储不同类型的数据。同一时间只有一个成员有效,所有成员共享同一块内存空间。这使得union在节省内存和实现特定底层操作时非常有用。
定义一个union的方式与结构体类似,但所有成员从同一地址开始存储:
union Data {
int i;
float f;
char str[4];
};
使用时只能保证当前赋值的成员是有效的:
Data data; data.i = 10; cout << "data.i: " << data.i << endl; data.f = 220.5; // 此时i的值不再有效 cout << "data.f: " << data.f << endl;
union的总大小等于其最大成员所需的字节数,并按最大成员的对齐方式对齐。
立即学习“C++免费学习笔记(深入)”;
例如上面的 Data 联合体:
所以整个union大小为4字节。所有成员都从同一地址开始,读写任意成员都会覆盖这块内存。
再看一个更复杂的例子:
union Mixed {
long long ll; // 8字节
double d; // 8字节
int arr[3]; // 12字节
};
尽管前两个成员都是8字节,但arr占12字节,因此union大小为12字节,按8字节对齐(取决于平台)。
union常用于以下场景:
例如查看float的二进制表示:
union {
float f;
uint32_t i;
} u;
u.f = 3.14f;
cout << hex << u.i << endl; // 输出f的IEEE 754编码
基本上就这些。union不复杂但容易误用,关键是理解“同一时间只一个成员有效”的原则。使用时要配合外部标记判断当前类型,否则极易引发未定义行为。C++11之后推荐使用 std::variant 来替代大部分union用途,更加安全。
以上就是C++ union联合体用法_C++共用体内存分布的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号