c++11 enum class
来源:互联网 发布:电信云计算地址 编辑:程序博客网 时间:2024/05/20 21:49
GCC 官方站点提供了很好的文档,这里非常好的解释了为什么要引入enum class这个强类型enum。
任何希望精通C++的人,其实都应该认真的阅读C++的标准文档,而不是只看别人写的书,第一手资料,特别是标准文档永远都是不可替代的。然后才是其他的书籍帮助更深的理解这些标准。
提供这个enum class的原因是因为旧的enum有不少缺点。简单描述一下:
1. 容易被隐式转换成int
2. underlying type 指的是编译器实现者幕后的实现细节导致了跨平台,跨编译器的不一致性。尺寸的不可估计等等。
3. 没有严格的scope界限
文档中还分析了试图解决以上问题的方法,但是最终都因为有各自的缺陷,还是创造了enum class来解决。技术总是不断的发展,enum class今天看解决了过去的问题,或许不久又会发现其还有缺点。:)
下面我写了一个例子:
#ifndef BEAN_REST_CODE_H_#define BEAN_REST_CODE_H_enum class RestCode { OK, ADD_CPU_ERROR };#endif松了一口气,幸亏没有搞得像Java的Enum那么复杂。
现在不能隐式转换成int了,那么如果我真的需要这样做怎么办?比如序列化到流里面。用underlying_type。来自stackoverflow一个帖子,据说这个代码又来自某开源库。
#ifndef HELPER_ENUM_HELPER_H_#define HELPER_ENUM_HELPER_H_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);}#endif
至于语法怎么用,文档中有详细描述。仔细阅读吧。
- c++11 enum class
- c++11 enum class
- c++11 class enum
- C++11的enum class & enum struct和enum
- C/C++ enum class枚举类型
- enum 与enum class
- Enum Class
- 【c++11】 enum class: 强类型枚举
- C++11中enum class的使用
- my java enum class
- 九,Enum Class
- Enum are Class Types
- ES6 class enum function
- enum,struck与class
- c enum
- c++11中enum class的用法详解
- c++11中输出enum class变量的数值
- [转]Enum还是Enum Class(枚举类)
- SDJZUOJ 1035 放大的X
- 教你如何分割大体积的ISO镜像文件
- socket perror 为operation on non-socket 解决
- 直接拿来用!最火的Android开源项目(二)
- 不良编程文化
- c++11 enum class
- 世界上最让人抓狂的编程语言:BANCStar
- Android优秀开源项目
- 浏览器安全问题分析
- STM32串口使用Printf()函数问题
- 最大值和最小值Ex3
- 飘逸的python - 通过calendar来把某个月按周划分
- 上大学=读书?
- Guava学习之AbstractMapBasedMultimap