为什么不能将带范围的枚举隐式转换为int?如果我有
enum class Foo:uint32_t{...};
然后我知道Foo所涵盖的整数是uint32_t覆盖的整数的子集,所以我应该总是安全的。我在这里错过了一些怪癖吗?相反的情况可能并不安全。
答案 0 :(得分:6)
仅仅因为这样的转换总能成功并不意味着你希望它是隐含的。
作用域枚举的全部目的是它们是不同的类型,在重载解析期间不会导致令人困惑的结果。
明确是好的。
答案 1 :(得分:5)
正如LightnessRacesinOrbit在他的answer中解释的那样,范围枚举的全部目的是禁止隐式转换为基础类型。
您可以通过static_cast
显式转换它们,但如果您希望能够指定基础类型,同时允许隐式转换,您也可以使用常规枚举,只需删除{{1定义中的关键字。
class