枚举成员类型仍然依赖于实现
Is enum members type still implementation-dependent?
我读过一些关于c++ 11的文章,但没有一篇提到枚举成员的大小是否与实现相关保持不变。
- 现在还是这样吗?
- 如果是,使用
enum class Token : int { ... };
显式强制编译使它们为int类型是一个好习惯吗?
如果没有为未限定作用域的枚举指定类型,则该类型是实现定义的,它可以是能够表示所有枚举值的任何类型(如果没有这样的类型,则程序是病态的)。这与c++ 11之前的所有枚举的行为相同。
如果你没有为一个有作用域的枚举指定类型,那么它有一个固定类型int
。如果您愿意,可以明确指定类型,但我认为这通常不是最佳实践。
根据标准§7.2/5:
我每个枚举也有一个基础类型。基础类型可以使用enum-base显式指定;如果未显式指定,则作用域枚举类型的基础类型为
int
。
(重点)。
在这个问题上(底层类型),enum
和enum class
/enum struct
之间的标准没有任何区别。
相关文章:
- VS 2015 链接错误 无法构建依赖于 libcurl 的项目
- 为什么内存屏障依赖于变量?
- 反转依赖于 end() 的迭代器
- 编译依赖于 QTCore 库的 WASM
- 如何添加依赖于类本身的模板成员变量
- 初始化依赖于子类的继承类的常量类成员
- Makefile 创建两个库 - 一个依赖于另一个
- 对于BTreeMap和其他依赖于Ord的东西,是否有等效于C++比较器对象?
- 类成员函数参数列表是否可以依赖于模板参数?
- 依赖于类成员属性的类实例成员
- 如何让成员函数实现依赖于类的模板参数?
- 具有依赖于实现的成员函数类型的多个静态接口
- 依赖于姐妹类的类的实现
- 依赖于模板的实现
- 将 POD 联合双关到基本类型:依赖于实现或符合标准
- 依赖于实现的行为和未定义的行为之间有什么区别吗
- 依赖于构造函数参数的类方法的特殊实现
- c++字节依赖于实现
- 如何实现内部实现依赖于模板参数的类
- 枚举成员类型仍然依赖于实现