首页 > 后端开发 > C++ > 正文

C++ union联合体用法_C++内存共用机制与字节序判断技巧

冰火之心
发布: 2025-12-19 19:51:07
原创
189人浏览过
联合体是一种特殊复合类型,所有成员共享同一内存空间,大小等于最大成员长度。定义方式类似结构体,但成员从同一地址开始存储。例如:union Data { int i; float f; char str[4]; }; 使用时同一时间只能安全访问一个成员,写入一个成员会覆盖其他成员的值。如Data data; data.i = 10; cout

c++ union联合体用法_c++内存共用机制与字节序判断技巧

联合体(union)是C++中一种特殊的复合数据类型,它允许在同一个内存位置存储不同的数据类型。所有成员共享同一块内存空间,因此联合体的大小等于其最大成员所需的字节长度。这种机制在处理内存共用、类型转换和底层系统编程时非常有用,比如用于判断机器的字节序(endianness)。

联合体的基本用法

联合体的定义方式与结构体类似,但所有成员从同一地址开始存储:

union Data {
    int i;
    float f;
    char str[4];
};
登录后复制

使用示例:

Data data;
data.i = 10;
cout << "整型值: " << data.i << endl;

data.f = 2.5; // 覆盖之前的i值
cout << "浮点值: " << data.f << endl;
登录后复制

注意: 同一时间只能安全访问一个成员。写入一个成员后读取另一个会导致未定义行为,除非用于特定类型重解释(如类型双关)。

立即学习C++免费学习笔记(深入)”;

利用联合体判断字节序

小端(Little-Endian)系统将低位字节存放在低地址,大端(Big-Endian)则相反。联合体可结合类型双关来检测当前平台的字节序:

稿定抠图
稿定抠图

AI自动消除图片背景

稿定抠图 80
查看详情 稿定抠图
bool isLittleEndian() {
    union {
        int i;
        char c;
    } test;
    test.i = 1;
    return test.c == 1; // 若最低字节为1,则为小端
}
登录后复制

原理:整数1在内存中的表示为 0x00000001。若其第一个字节(即char成员)为1,说明低地址存放低位字节,即小端模式。

联合体与类型双关(Type Punning)

联合体常用于绕过C++严格别名规则进行类型转换,例如将float按位转为int以查看IEEE 754表示:

union FloatInt {
    float f;
    int i;
};

FloatInt u;
u.f = 3.14f;
cout << "float 3.14 的整型表示: " << hex << u.i << endl;
登录后复制

重要提示: C++标准中通过非活跃成员访问数据属于未定义行为,但在大多数编译器(如GCC、Clang)中被支持并广泛用于系统级编程。更合规的方式是使用memcpystd::bit_cast(C++20)。

联合体的限制与注意事项

  • 不能包含引用成员
  • 不能有虚函数或继承关系
  • 静态成员不被允许
  • C++11起支持含构造函数/析构函数的类作为成员,但需手动管理生命周期
  • 匿名联合体可在作用域内直接访问成员

基本上就这些。联合体是一种高效但需谨慎使用的工具,特别适合嵌入式开发、协议解析和性能敏感场景。掌握它有助于深入理解内存布局和硬件特性。

以上就是C++ union联合体用法_C++内存共用机制与字节序判断技巧的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号