有没有一种方法可以将enum class
字段转换为基础类型?我认为这将是自动的,但显然不是。
enum class my_fields : unsigned { field = 1 };
unsigned a = my_fields::field;
该作业已被GCC拒绝。error: cannot convert 'my_fields' to 'unsigned int' in assignment
。
仅供参考,该规则在中定义
—
Lightness Races in Orbit
[C++11: 7.2/9]
。
@Pubby可悲的是,没有范围的“枚举”会污染所有枚举数的外部范围。las,这两个世界都没有最好的选择(无论如何从C ++ 14开始),它干净地嵌套了作用域,同时隐式转换为基本类型(当您通过传递更多派生类型时,这与C ++处理其他类继承的方式不一致。值或对具有基本类型的函数的引用)。
—
Dwayne Robinson
@DwayneRobinson是的。将无作用域的枚举粘贴在结构或(最好是)名称空间中。因此,它是作用域的,并且仍然具有隐式int转换。(尽管我一定会三思而后行,为什么需要转换为int并可能考虑是否有更好的方法。)
—
Pharap
enum
。