或者另一种表达方式的方法是:编译器是否可以假设enum
的实例只能保存声明要保留和优化的值?
enum MyType { A = 1, B = 2 };
const MyType C = static_cast<MyType>(3);
void fun(MyType m) {
switch (m) {
case A:
// ...
break;
case B:
// ...
break;
case C:
// can this be optimized away?
}
}
答案 0 :(得分:4)
编译器无法优化未声明的枚举值。讨论调查员的语言规范部分说
可以定义一个枚举,该枚举的值不是由任何枚举器定义的。
因此允许枚举具有未在枚举声明中明确指定的值。
此外,关于位掩码类型的部分给出了使用未定义的枚举值的示例,特别提到0作为有效的标志值。
由于枚举值无法声明是有效的,编译器无法优化使用它们的代码。