首页 > 解决方案 > 为什么比较范围枚举是合法的

问题描述

尽管作用域枚举 ( enum class) 不能隐式转换为整数类型,但我仍然可以通过<(在 GCC 10.3 上)来比较它们。

#include <algorithm>
#include <iostream>

enum class Colours {
    Red = 0,
    Green = 1,
    Blue = 2
};

int main() {
    std::cout << (std::min(Colours::Blue, Colours::Red) < Colours::Green) << std::endl;
    return 0;
}

为什么这是标准行为(如果是)?

你能给我一个cppreference.com或 c++ 标准的参考吗?

标签: c++language-lawyer

解决方案


这在比较运算符中进行了描述

算术比较运算符

如果操作数具有算术或枚举类型(作用域或非作用域),则按照算术运算符的规则对两个操作数执行通常的算术转换。转换后比较这些值:

因此,除了算术类型(包括整数类型)之外,还明确提到了作用域和非作用域枚举类型。


推荐阅读