将范围枚举转换为int

时间:2014-05-08 18:02:01

标签: c++ c++11 type-safety

为什么不能将带范围的枚举隐式转换为int?如果我有

enum class Foo:uint32_t{...};

然后我知道Foo所涵盖的整数是uint32_t覆盖的整数的子集,所以我应该总是安全的。我在这里错过了一些怪癖吗?相反的情况可能并不安全。

2 个答案:

答案 0 :(得分:6)

仅仅因为这样的转换总能成功并不意味着你希望它是隐含的。

作用域枚举的全部目的是它们是不同的类型,在重载解析期间不会导致令人困惑的结果。

明确是好的。

答案 1 :(得分:5)

正如LightnessRacesinOrbit在他的answer中解释的那样,范围枚举的全部目的是禁止隐式转换为基础类型。

您可以通过static_cast显式转换它们,但如果您希望能够指定基础类型,同时允许隐式转换,您也可以使用常规枚举,只需删除{{1定义中的关键字。

class