c++11中输出enum class变量的数值
来源:互联网 发布:潘安传奇网络电影 编辑:程序博客网 时间:2024/06/07 06:08
enum class强枚举类
c++11中定义了强枚举类,即enum class
,与之前的enum
类型相比,它解决了以下三个问题:
1. 枚举类型与整形之间的隐式转换:
2. 底层类型无法由程序员指定:
3. 弱作用域
用实例来看一下,首先最大的变化是定义方式:
c++03: enum Color{Red, Yellow, Blue};c++11: enum class Color{Red, Yellow, Blue};
明显可以看到在enum
之后添加了class
关键字,并且可以指定底层类型,如:
enum class Color:unsigned long{...};
枚举类默认的底层类型是int
,可以通过如下方式获得一个枚举类的底层类型:
std::underlying_type<Color>::type
强枚举类也强化了作用域的概念,在使用枚举类中的类型时必须添加枚举类名,消除了可能出现的二义性。例如:
c++03:enum Color{Red. Yellow, Blue};enum Band{Yellow, Backstreet Boy, Metal};Color a = Yellow; //???which one?c++11:enum class Color{Red. Yellow, Blue};enum class Band{Yellow, Backstreet Boy, Metal};Color a = Color::Yellow;//ok
输出枚举类的字面值
在强枚举类出现之前,由于enum
变量可以进行整型提升,所以可以把它当作整型来使用,但在强枚举类出现之后,这个方法行不通了,并且cout
也没有对其提供支持,不能直接输出枚举类的值,如下写法是错误的:
std::cout<<Color::Red<<std::endl;
那么,当我们需要输出一个枚举类变量的值时,该怎么做呢?答案是强制转换。将枚举类变量强制转换为对应的底层类型,再将其输出即可。以Color a
为例,我们要输出a
的值,可以这样做:
Color a = Color::Yellow;std::cout<<static_cast<std::underlying_type<Color>::type>(a)<<std::endl;
也可以将其写成一个模板:
template <typename Enumeration>auto as_integer(Enumeration const value) -> typename std::underlying_type<Enumeration>::type{ return static_cast<typename std::underlying_type<Enumeration>::type>(value);}
还有一种方法就是为特定枚举类重载<<
操作符。这个就不写了,思路都一样。
参考
c++11 enum class
enum class 文档
在C++11中,如何输出枚举类的值
阅读全文
0 0
- c++11中输出enum class变量的数值
- C++11中enum class的使用
- C++11的enum class & enum struct和enum
- C语言中交换两个变量数值的方法
- c++11中enum class的用法详解
- 关于C/C++中 Class, Struct, enum的定义声明位置
- C语言编程艺术--C语言中enum变量类型的使用
- C 语言不同C文件中 enum 枚举变量的使用方法
- JSP中输出Enum
- C语言中枚举(enum)变量可以没有名字
- c++11 enum class
- c++11 enum class
- c++11 class enum
- C语言中enum与typedef enum的用法
- session.get(Class.class, Serializable.class)中Serializable.class不能传数值的问题
- enum和enum class的使用
- enum 变量内存大小(c++)
- C语言中enum类型的用法
- Tengine(编译)安装示例
- 解决使用NAT连接的linux可以上网,但是ping不通问题
- 持续集成之jenkins实践教程:基础篇(2): 集成gitlab
- html标签
- 返回值与输出参数比较(return value or out parameter)
- c++11中输出enum class变量的数值
- SpringMVC请求流程
- 【C语言】for语句
- 营养联系行为
- Python 多线程 Thread包
- 邻接表
- 神奇的伽玛函数(下)
- 怎么样更改placeholder中文字的颜色属性
- 正向代理和反向代理的区别