use*_*329 2 c++ type-safety c++11
为什么不能将带范围的枚举隐式转换为int?如果我有
enum class Foo:uint32_t{...};
Run Code Online (Sandbox Code Playgroud)
然后我知道Foo覆盖的整数是uint32_t覆盖的整数的子集,所以我应该总是安全的.我在这里错过了一些怪癖吗?但相反的情况并不安全.
正如LightnessRacesinOrbit在他的回答中解释的那样,范围枚举的整个目的是禁止隐式转换为基础类型.
您可以通过a显式转换它们static_cast,但如果您希望能够指定基础类型,同时允许隐式转换,您也可以使用常规枚举,只需class从定义中删除关键字.
enum class Foo1 : uint32_t{ THING };
enum /*class*/ Foo2 : uint32_t{ THING };
uint32_t conv1 = static_cast<uint32_t>(Foo1::THING);
uint32_t conv2 = Foo2::THING; // <-- implicit conversion!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2826 次 |
| 最近记录: |