枚举成员类型是否依赖于实现?

时间:2014-03-24 21:37:23

标签: c++ c++11 standards

我读过一些关于C ++ 11的文章,但没有一篇文章提到枚举成员依赖于实现的大小是否保持不变。

  1. 情况仍然如此吗?
  2. 如果是,使用enum class Token : int { ... };明确强制编译使它们成为int类型是否是一个很好的实践?

2 个答案:

答案 0 :(得分:3)

如果没有为unscoped枚举指定类型,那么类型是实现定义的,它可以是任何能够表示所有枚举器值的类型(如果没有这样的类型则程序格式不正确) 。这与C ++ 11之前的所有枚举行为相同。

如果没有为作用域枚举指定类型,则它具有固定类型int。如果你愿意,你可以明确说明这种类型,但我认为它通常不被认为是最佳实践。

答案 1 :(得分:1)

根据标准§7.2/ 5:

  

每个枚举也有一个基础类型。可以使用enum-base明确指定基础类型; 如果未明确指定,则作用域枚举类型的基础类型为int

(强调我的)。

关于此事(基础类型),该标准在enumenum class / enum struct之间没有任何区别。