【入门级-C++程序设计:10、结构体与联合体-联合体】

C++ 联合体 (Union)
联合体(union)是C++中的一种特殊数据类型,它允许在相同的内存位置存储不同的数据类型。联合体与结构体(struct)类似,但关键区别在于联合体的所有成员共享同一块内存空间。

基本语法
union UnionName {
member_type1 member1;
member_type2 member2;
// …
};

特点
共享内存:联合体的大小等于其最大成员的大小,所有成员共享同一内存空间,同一时间只能存储一个成员的值:给一个成员赋值会影响其他成员的值。
节省内存:当需要存储多种类型但同一时间只会使用一种时,联合体比结构体更节省内存

举例说明
#include
using namespace std;
union Data {
int i;
float f;
char str[20];
};
int main() {
Data data;
data.i = 10;
cout << "data.i: " << data.i << endl;
data.f = 220.5;
cout << "data.f: " << data.f << endl;
cout << "data.i is now undefined: " << data.i << endl; // 未定义行为
strcpy(data.str, “C++ Union”);
cout << "data.str: " << data.str << endl;
return 0;
}

匿名联合体
C++允许定义匿名联合体(没有名称的联合体),其成员可以直接在定义联合体的作用域中访问。

#include
using namespace std;

int main() {
union {
int i;
float f;
};

i = 10;
cout << i << endl;

f = 3.14;
cout << f << endl;

return 0;

}
联合体的应用场景:
需要节省内存空间时
需要以不同方式解释同一段内存时
实现变体类型(variant type)
低级编程中访问硬件寄存器

C++11开始,联合体可以包含带有构造函数的类成员,但需要手动管理这些成员的生命周期。

#include
#include
using namespace std;
union U {
int i;
float f;
string s; // C++11允许,但需要手动管理
U() {} // 需要默认构造函数
~U() {} // 需要析构函数
};
int main() {
U u;
new (&u.s) string(“Hello”); // 使用placement new构造
cout << u.s << endl;
u.s.~string(); // 显式调用析构函数
return 0;
}

注意事项
联合体不能继承或作为基类
联合体不能包含虚函数
联合体不能包含引用成员
使用联合体时需要特别注意类型安全
联合体在特定场景下非常有用,但需要谨慎使用以避免未定义行为。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papership

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值