为什么下面的代码编译没有任何错误?
enum class Enumeration;
void func()
{
auto enumeration = static_cast<Enumeration>(2);
auto value = static_cast<int>(enumeration);
}
答案 0 :(得分:5)
它编译是因为编译器在编译时知道Enumeration
的大小(恰好是空的)。
您可以使用以下语法明确地看到它:
enum class Enumeration : short;
编译器知道有关Enumeration
的所有信息。
Enumeration
是 opaque-enum-declaration ,这也意味着该类型为complete
,即您可以在其上使用sizeof
。如果需要,您可以在以后的重新声明中指定枚举器列表(除非重新声明带有不同的基础类型,显然)。
请注意,由于您使用enum class
,因此必须使用static_cast
。
int
,但您可以安全地使用static_cast
来检索其整数值。他们仍然enum
毕竟。
作用域的值没有隐式转换 枚举器到整数类型,虽然static_cast可能用于 获取枚举器的数值。
有关此主题的更多信息,请访问:How to automatically convert strongly typed enum into int?