使用 union
实现
#include <iostream>
#include <cstring>
union Data {
int intValue;
float floatValue;
char charValue;
};
int main() {
Data data;
// 存储整数
data.intValue = 42;
std::cout << "Stored integer: " << data.intValue << std::endl;
// 存储浮点数
data.floatValue = 3.14f;
std::cout << "Stored float: " << data.floatValue << std::endl;
// 存储字符
data.charValue = 'A';
std::cout << "Stored char: " << data.charValue << std::endl;
return 0;
}
访问和修改数据
- 访问:根据当前存储的数据类型,直接访问对应的成员变量。例如,如果存储的是整数,就访问
intValue
。
- 修改:直接给对应的成员变量赋值即可,例如
data.intValue = newIntValue;
union
与 struct
对比
union
优点:
- 节省内存:
union
所有成员共享同一块内存空间,大小为其最大成员的大小,对于存储不同类型但不会同时使用的数据非常节省内存。
union
缺点:
- 数据一致性问题:由于所有成员共享内存,当修改一个成员的值时,会覆盖其他成员的值,需要程序员手动维护数据一致性,否则容易导致数据错误。
- 类型安全问题:没有类型检查机制,可能会错误地访问与当前存储类型不匹配的成员,导致未定义行为。
struct
优点:
- 数据独立性:
struct
的每个成员都有自己独立的内存空间,修改一个成员不会影响其他成员,数据一致性更容易维护。
- 类型安全:编译器可以对
struct
的成员访问进行类型检查,减少未定义行为。
struct
缺点:
- 占用内存多:
struct
的大小是所有成员大小之和(考虑内存对齐),对于存储不同类型但不会同时使用的数据,会浪费较多内存空间。