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

标签 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?
    }
}

最佳答案

编译器无法优化未声明的枚举值。关于枚举数的语言规范部分说

It is possible to define an enumeration that has values not defined by any of its enumerators.

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

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

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

关于c++ - 是否允许编译器优化依赖于具有未声明值的枚举的分支?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39301356/

相关文章:

c++ - 如何在 Windows Mobile 下生成 GUID?

c++ - 如何在cpp20实验中导入C断言

c++ - 是否有针对 C++ 优化编译器的良好测试?

C++算法循环融合优化

haskell - rseq/seq 的存在是否会破坏引用透明度?是否有一些替代方法不可以?

c++ - 用户定义的 Vector 类的自动类型转换?

c++ - C++ 中的适配器公共(public)函数 - 好吗?坏的?甚至是真实的模式?

c - GCC 4.6.3 Linux -O3 启用优化列表与应用于代码差异。优化顺序是否影响代码编译?

c++ - 有没有办法在全局命名空间中调用类?

c++ - Visual C++.NET,速度优化