当前位置: 首页 > news >正文

53 C++ 现代C++编程艺术2-枚举和枚举类

C++ 现代C++编程艺术2-枚举和枚举类.md

文章目录

  • C++ 现代C++编程艺术2-枚举和枚举类.md
    • C语言中的枚举
    • C++中的枚举
    • 枚举类的用法

C语言中的枚举

成员值只能为int类型,无法修改。
底层类型由编译器决定(通常为int),无法手动指定。

  • 成员直接暴露在全局作用域,不同枚举的成员名不可重复。
enum Color { RED, GREEN };  
enum Signal { RED };  // 错误:RED重复定义 
  • 允许隐式转换为整型,可能引发逻辑错误:
enum Color { RED, GREEN };  
int x = RED;  // 直接赋值,无类型检查 
#include <stdio.h>
enum SHAPE {CIRLE, RECT, POINT,LINE};
enum WEEK {TUS};int main()
{//用枚举初始换枚举变量enum SHAPE myshape = CIRLE;myshape = RECT;//用非枚举值或者数字,初始化枚举变量enum SHAPE msy = TUS;msy = 23;if(CIRLE == TUS){printf("相等\n");}
return 0;
}

C++中的枚举

c++里的枚举成员值类型可自由定义(如shortunsigned等),提升灵活性。

#include <iostream>
using namespace std;
enum SHAPE {CIRLE, RECT, POINT,LINE};
enum WEEK {TUS};int main()
{//用枚举初始换枚举变量SHAPE myshape = CIRLE;myshape = RECT;//用非枚举值或者数字,初始化枚举变量// enum SHAPE msy = TUS;// msy = 23;// if(CIRLE == TUS)//警告if(CIRLE == RECT){printf("相等\n");}
return 0;
}
  • C++枚举类(C++11起)
    成员限定在枚举作用域内,需通过枚举名::成员访问,避免命名冲突:

    enum class Color { RED, GREEN };  
    enum class Signal { RED };  // 合法 
    
  • 禁止隐式转换,需显式类型转换(如static_cast):

    enum class Color { RED, GREEN };  
    int x = static_cast<int>(Color::RED);  // 必须显式转换 
    
  • 支持显式指定底层类型(如charuint16_t等),优化内存与兼容性:

    enum class SmallEnum : uint8_t { A, B };  // 占1字节 
    
  • 允许前向声明(需指定底层类型):

    enum class Color : int;  // 前向声明 
    void setColor(Color c);  
    enum class Color : int { RED, GREEN };  // 后续定义 
    

枚举类的用法

枚举类是强枚举类型

#include <iostream>
using namespace std;
enum class SHAPE {CIRLE, RECT, POINT,LINE};
enum class WEEK {TUS};int main()
{//用枚举初始换枚举变量SHAPE myshape = SHAPE::CIRLE;myshape = SHAPE::RECT;//用非枚举值或者数字,初始化枚举变量// enum SHAPE msy = TUS;// msy = 23;// 错误,类型不同,不能比较if(SHAPE::CIRLE == WEEK::RECT){printf("相等\n");}
return 0;
}
http://www.dtcms.com/a/346314.html

相关文章:

  • 大麦盒子DM4036亲测刷包实践笔记
  • AI领域的语义空间是什么?
  • 波士顿房价线性回归预测讲解
  • 基于SpringBoot的家教信息预约管理系统【2026最新】
  • Spring IOC 原理与高级特性剖析
  • Redis---事务
  • 企业如何建立有效备份,防范病毒并快速恢复数据
  • UVM一些不常用的功能
  • 2公里级、高分辨率:新一代OCI重新定义光纤精准定位
  • huggingface离线下载模型使用方法
  • PiscCode使用 MediaPipe 检测人脸关键点多样展示
  • 域名地址是什么?
  • Python 异步框架 (Async/Aiohttp) 调用淘宝 API:实现万级商品数据异步采集
  • 透射TEM新手入门:衍射斑点标定 1
  • Java面试-== 和 equals() 方法的区别与实现原理
  • 结构-活性关系SAR中scaffold识别
  • MAPGIS6.7地质编录
  • Codeforces 一场真正的战斗
  • 线段树模版
  • 多态(polymorphism)
  • RS485通过NiMotion协议发送报文控制电机运行案例
  • 嵌入式学习日记(32)Linux下的网络编程
  • 全球教育数字化与人工智能应用现状扫描—不同教育阶段(学前、K12、高等教育、职业教育、成人教育)的应用差异与特点
  • Linux 软件包安装和管理的相关操作及使用总结(未完成)
  • 金蝶云星空·旗舰版 × 聚水潭跨境业务一体化集成方案
  • 速卖通、塔吉特采购自养号下单技术:打造自主可控的采购新方式
  • Eigen 中Sparse 模块的简单介绍和实战使用示例
  • Docker部署的Rancher无法重启----重建 Rancher Server 并修复 TLS
  • Lecture 19: Memory Management 6
  • linux驱动 day60