c++ - 为什么比较范围枚举是合法的
问题描述
尽管作用域枚举 ( 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++ 标准的参考吗?
解决方案
算术比较运算符
如果操作数具有算术或枚举类型(作用域或非作用域),则按照算术运算符的规则对两个操作数执行通常的算术转换。转换后比较这些值:
因此,除了算术类型(包括整数类型)之外,还明确提到了作用域和非作用域枚举类型。
推荐阅读
- python-3.x - 使用 VSCode Remote 调试 Python - 容器
- docker-compose - 如何在docker中隐藏链接容器的端口
- sockets - TCP wrappers 的 GetStream().Read/Write 和 Socket 的 Receive/Send 之间有什么区别吗
- javascript - 最可能的原因是在 Zone.js 之后已经加载了一个 Promise polyfill(加载 zone.js 时不需要Polyfilling Promise api
- c# - 如何解决此问题:“无法将 'System.Collections.Generic.List`1[System.DateTime]' 类型的对象转换为 'System.IConvertible' 类型。”
- office365 - 如何在 Microsoft Teams 中阻止消息
- android - 如何在我的主题中更改材质按钮禁用状态背景颜色?
- java - Spring - 将@Bean添加到没有名称属性的字符串
- yaml - 尝试运行 traefik-deeployment.yml 时服务“traefik-ingress-service”无效
- java - 如何在 IDEA IntelliJ 的调试模式下发送输入?