C++:union类型
class和struct在C++上基本没啥区别,就只有class成员权限默认为private而struct默认为public
而union和前两者稍有不同,其最大的区别在于内部成员变量共享一块内存,只是这个内存可以存放不同的变量类型(占用内存大小选取取占用最大的成员变量的占用内存),所以每次无论对哪个成员更改都会将所有成员都修改,因为他们本来就是同一个数据。
下面用一个例子:TYPEA有两种数据成员类型,当我们对成员a赋值,输出结果如下
union TYPEA { float a; int b; }; TYPEA a1; a1.a = 1.0; //a1.b = 2; std::cout << "a1.a = " <<a1.a <<std::endl;
可以看到没什么问题
当我们对a赋值后再对b赋值,结果如下
union TYPEA { float a; int b; }; TYPEA a1;
//先赋值a再赋值b a1.a = 1.0; a1.b = 2; std::cout << "a1.a = " << a1.a << std::endl; std::cout << "a1.b = " <<a1.b <<std::endl;
可以看到最后赋值的b没问题,而a显然被修改了,这是因为a和b本身公用一块内存,修改了b相当于a也被改动了,由于数据类型表示方法不同,可能会是一个难以理解的数
这种数据可以用来解决内存占用问题,当我们需要定义一个数据但不确定他是什么类型时可以使用,如IP地址,我们不清楚是IPV4还是IPV6,则可以用union定义两个成员变量,需要初始化时选择其一。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南