我读过一些关于C ++ 11的文章,但没有一篇文章提到枚举成员依赖于实现的大小是否保持不变。
enum class Token : int { ... };
明确强制编译使它们成为int类型是否是一个很好的实践?答案 0 :(得分:3)
如果没有为unscoped枚举指定类型,那么类型是实现定义的,它可以是任何能够表示所有枚举器值的类型(如果没有这样的类型则程序格式不正确) 。这与C ++ 11之前的所有枚举行为相同。
如果没有为作用域枚举指定类型,则它具有固定类型int
。如果你愿意,你可以明确说明这种类型,但我认为它通常不被认为是最佳实践。
答案 1 :(得分:1)
根据标准§7.2/ 5:
每个枚举也有一个基础类型。可以使用enum-base明确指定基础类型; 如果未明确指定,则作用域枚举类型的基础类型为
int
。
(强调我的)。
关于此事(基础类型),该标准在enum
和enum class
/ enum struct
之间没有任何区别。