编译器是否允许优化依赖于具有未声明值的枚举的分支?

时间:2016-09-02 22:16:55

标签: c++ compiler-optimization

或者另一种表达方式的方法是:编译器是否可以假设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?
    }
}

1 个答案:

答案 0 :(得分:4)

编译器无法优化未声明的枚举值。讨论调查员的语言规范部分说

  

可以定义一个枚举,该枚举的值不是由任何枚举器定义的。

因此允许枚举具有未在枚举声明中明确指定的值。

此外,关于位掩码类型的部分给出了使用未定义的枚举值的示例,特别提到0作为有效的标志值。

由于枚举值无法声明是有效的,编译器无法优化使用它们的代码。