传统行为¶
枚举有如下问题:

作用域不受限,会容易引起命名冲突。例如下面无法编译通过的:

#include <iostream>
using namespace std;enum Color {RED,BLUE};
enum Feeling {EXCITED,BLUE};int main()
{return 0;
}

经典做法

解决作用域不受限带来的命名冲突问题的一个简单方法是,给枚举变量命名时加前缀,如上面例子改成 COLOR_BLUE 以及 FEELING_BLUE。

一般说来,为了一致性我们会把所有常量统一加上前缀。但是这样定义枚举变量的代码就显得累赘。C 程序中可能不得不这样做。不过 C++ 程序员恐怕都不喜欢这种方法。替代方案是命名空间:
namespace Color
{enum Type{RED=15,YELLOW,BLUE};
};
这样之后就可以用 Color::Type c = Color::RED; 来定义新的枚举变量了。如果 using namespace Color 后,前缀还可以省去,使得代码简化。不过,因为命名空间是可以随后被扩充内容的,所以它提供的作用域封闭性不高。在大项目中,还是有可能不同人给不同的东西起同样的枚举类型名。
更“有效”的办法是用一个类或结构体来限定其作用域,例如:定义新变量的方法和上面命名空间的相同。不过这样就不用担心类在别处被修改内容。这里用结构体而非类,一是因为本身希望这些常量可以公开访问,二是因为它只包含数据没有成员函数。
struct Color1
{enum Type{RED=102,YELLOW,BLUE};
};

c++枚举类型(一)相关推荐

  1. 《挑战30天C++入门极限》新手入门:C/C++中枚举类型(enum)

        新手入门:C/C++中枚举类型(enum) 如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型.之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来. ...

  2. ASP.NET中绑定枚举类型

    在项目开发中好多地方用了枚举,要把枚举显示到下拉列表框中我们平常的方法就是在下拉列表控件中一个一个添加进去!这样做也行但如果我的枚举类型中的枚举值一旦改变,那么你就得满世界的去找然后再修改很麻烦. 这 ...

  3. 深度分析Java的枚举类型——枚举的线程安全性及序列化问题

    点击关注,快速进阶高级架构师 作者:Hollis 写在前面:Java SE5提供了一种新的类型-Java的枚举类型,关键字enum可以将一组具名的值的有限集合创建为一种新的类型,而这些具名的值可以作为 ...

  4. C++ 枚举类型基本知识

    1.定义 enum <类型名> {<枚举常量表>}; 2.说明 关键字enum--指明其后的标识符是一个枚举类型的名字. 枚举常量表--由枚举常量构成.枚举常量只能以标识符形式 ...

  5. Java基础教程(15)--枚举类型

      枚举类型定义了一个枚举值的列表,每个值是一个标识符.例如,下面的语句声明了一个枚举类型,用来表示星期的可能情况: public enum Day {SUNDAY, MONDAY, TUESDAY, ...

  6. 【C++】枚举类型应用

    运行环境:VS2017 可以参考:[C++]枚举类型 医院内科有A,B,C,D,E,F,G共七位医生,每人在一周内要值一次夜班,排班的要求: (1)A比C晚一天 (2)D比E晚两天 (3)B比G早三天 ...

  7. 求你了,不要再在对外接口中使用枚举类型了!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 最近,我们的线上环境出现了一个问题,线上代码在执行过程中抛 ...

  8. JAVA高级特性--自动拆箱-装箱,枚举类型

    基本数据类型转换为引用类型对象 一个自动装箱的例子 Integer i=10;相当于 Integer i=new Integer(10); 一个自动拆箱的例子 Integer m=10;int n=m ...

  9. 简单探讨TypeScript 枚举类型

    这篇文章主要介绍了TypeScript 枚举类型,TypeScript 在 ES 原有类型基础上加入枚举类型,使得在 TypeScript 中也可以给一组数值赋予名字,这样对开发者比较友好,可以理解枚 ...

  10. C++ 枚举类型介绍

    枚举类型(enumeration)是 C++ 中的一种派生数据类型,它是由用户定义的若干枚举常量的集合. 定义格式:枚举类型的定义格式为: enum <类型名> {<枚举常量表> ...

最新文章

  1. React学习笔记5:React Hooks概述
  2. python可视化脉搏和血氧数据并通过阈值动态调整、动态可视化异常值
  3. CISCO CME:配置基于硬件的电话会议
  4. RTX 2080时代,如何打造属于自己的深度学习机器
  5. Pycharm连接git服务器的方法
  6. 使用string.Format需要注意的一个性能问题
  7. 罗斯蒙特电磁流量计8723说明书_罗斯蒙特8732E电磁流量计故障原因及解决办法!...
  8. 【牛客 - 289H】约会(思维,数学,奇偶数,水题)
  9. linux脚本获取usb设备,Linux基于USB端口执行脚本
  10. Page Object设计模式实践
  11. php 日期时间操作-可算出几天后的时间
  12. 技术胖Flutter第四季-19导航父子页面的跳转返回
  13. 通过VS2010性能分析来查找代码中那些地方最损耗资源
  14. 凯撒密码的Java实现
  15. HTML iframe设置背景透明
  16. 打开只能在微信客户端打开的链接
  17. pdf文件如何生成目录 wps_怎样快速为WPS文档增加目录
  18. Webview执行goBack不能返回
  19. idea怎样创建一个java项目?
  20. 尝试自己制作一个网页版的单机冒险岛!!

热门文章

  1. JAVA入门笔记·我的第一个JAVA程序
  2. springboot+多线程简单实现
  3. SpringBoot集成Redis--配置自定义的RedisCacheManager
  4. 「HDU6158」 The Designer(圆的反演)
  5. Spring MVC 返回视图时添加的模型数据------POJO
  6. 信号量与条件变量的区别
  7. 方案猿身高project联赛,艺术家,相反,养殖场!-------三笔
  8. 有些话不知道怎么说才好
  9. 802.11n 原理解析
  10. svn仓库出现already locked error解决方法:cleanup