news 2026/4/22 13:46:22

C++枚举与共用体实战指南:提升代码可读性与内存效率

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C++枚举与共用体实战指南:提升代码可读性与内存效率

一、枚举类型 enum

1. 什么是枚举?

枚举就是把可能的取值一一列出来,用来表示固定的几种状态。比如:星期、性别、颜色、状态(开始 / 暂停 / 结束)等。

好处:

  • 代码可读性极强
  • 限制取值范围,避免乱写数字
  • 编译时检查,更安全

2. 定义语法

enum 枚举名 { 常量1, 常量2, 常量3, ... };

3. 示例:定义星期

enum Week { Mon, // 0 Tue, // 1 Wed, // 2 Thu, Fri, Sat, Sun // 6 };
  • 默认从0开始依次递增
  • 也可以手动指定值
    enum Week {Mon=1, Tue, Wed};

4. 使用枚举变量

Week today = Wed; if (today == Wed) { cout << "今天周三" << endl; }

5. 典型场景:程序状态

enum State { STOP, RUN, PAUSE }; State s = RUN;

二、共用体 / 联合体 union

1. 什么是共用体?

多个成员共用同一块内存空间,同一时刻只有一个成员有效。

特点:

  • 所有成员共享同一段内存
  • 大小 = 最大成员的大小
  • 改一个成员,会覆盖其他成员

2. 定义语法

union 共用体名 { 成员1; 成员2; 成员3; };

3. 示例

union Data { int i; float f; char c; };

4. 使用

Data d; d.i = 10; // 现在用 i d.f = 3.14f; // 现在用 f,i 的值已经被覆盖

5. 适用场景

  • 类型互斥,只存一种数据
  • 内存极度紧张的嵌入式开发
  • 协议解析、类型双关(低级用法)

三、结构体 + 枚举 + 共用体 综合小案例

#include <iostream> #include <string> using namespace std; // 枚举:性别 enum Gender { MALE, FEMALE }; // 结构体:人 struct Person { string name; Gender gender; int age; }; int main() { Person p = {"张三", MALE, 20}; cout << "姓名:" << p.name << endl; if (p.gender == MALE) { cout << "性别:男" << endl; } else { cout << "性别:女" << endl; } system("pause"); return 0; }

四、struct /enum/union 对比(一张表看懂)

表格

类型特点内存用途
struct多个不同类型共存所有成员总和描述复杂对象(学生、商品)
enum有限个固定常量整型大小状态、分类、选项
union多个成员共用一块内存最大成员大小内存紧张、类型互斥

五、新手高频易错点

  1. 枚举常量不能加引号,它是常量不是字符串
  2. 以为 union 可以同时保存多个成员(不行,会互相覆盖)
  3. 枚举值直接当数字用,失去语义意义
  4. 混用枚举名和枚举变量,语法错误
  5. 给枚举赋不在列表里的值,编译器不报错但逻辑混乱

六、今日重点总结

  1. 枚举 enum:列出固定取值,提高可读性,默认从 0 开始
  2. 共用体 union:成员共享内存,同一时刻只用一个
  3. 结构体 + 枚举是最常用组合,适合描述对象状态
  4. 日常开发:struct 最多,enum 常用,union 极少用
  5. 枚举让代码更清晰,union 用于特殊内存场景
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/22 13:45:21

终极暗黑2存档编辑器指南:3分钟打造完美角色体验

终极暗黑2存档编辑器指南&#xff1a;3分钟打造完美角色体验 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 暗黑破坏神2&#xff08;Diablo 2&#xff09;作为经典ARPG游戏&#xff0c;其单机模式拥有庞大的玩家社区。然而&…

作者头像 李华
网站建设 2026/4/22 13:44:31

别再乱买网卡了!手把手教你用Kali和免驱网卡搭建无线安全测试环境(附驱动安装避坑)

Kali Linux无线安全测试环境搭建全指南&#xff1a;从硬件选型到实战演练 在网络安全领域&#xff0c;Kali Linux无疑是渗透测试人员的瑞士军刀。但许多初学者往往在第一步——搭建无线测试环境时就遭遇滑铁卢。一块兼容性良好的无线网卡和正确的配置方法&#xff0c;是开展后…

作者头像 李华
网站建设 2026/4/22 13:37:06

Stata实操:用xtreg命令搞定面板数据,固定效应和随机效应到底怎么选?

Stata面板数据分析实战&#xff1a;从数据清洗到模型选择的完整指南 当面对一份包含多个实体&#xff08;如公司、国家或个人&#xff09;在不同时间点观测值的数据集时&#xff0c;面板数据分析方法成为揭示深层规律的有力工具。不同于单纯的横截面或时间序列数据&#xff0c;…

作者头像 李华