为什么比较作用域枚举是合法的?

4

虽然作用域枚举(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++ 标准的参考文献吗?


这并没有回答问题,但是Red = 0, Green = 1, Blue = 2可以写成Red, Green, Blue。如果第一个枚举值没有初始化程序,它将获得值0。任何其他没有初始化程序的枚举器都会获得比其前任多1的值。 - Pete Becker
1个回答

2
这是在比较运算符中描述的。
引用块中写道: 算术比较运算符 如果操作数具有算术类型或枚举类型(作用域或无作用域),则按照算术运算符的规则对两个操作数执行通常的算术转换。 转换后,将比较值:
因此,除了算术类型(包括整数类型)外,还明确提到了作用域和无作用域枚举类型。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接