【发布时间】:2021-07-26 18:16:12
【问题描述】:
对于无范围的枚举,答案是“大多数”,因为隐式转换为基础整数类型。但是,作用域枚举没有这种隐式转换。相反,为它们定义了一些但不是所有可用于无范围枚举的运算符。
#include <iostream>
enum class Color{
Red,
Green,
Blue
};
int main()
{
std::cout << (Color::Red < Color::Green) << '\n';
// Fine, operator< is defined for Color
std::cout << (Color::Red + Color::Green == Color::Green) << '\n';
// no match for 'operator+'
}
我的猜测是关系运算符已定义,但算术运算符未定义,但我在the cppreference page 上没有看到任何明确的说法,并且没有进行实际的标准潜水以了解 C++ 正确必须做什么说说这件事。
【问题讨论】:
-
您可以在此处找到该信息:Comparison operators。其他操作也一样。似乎 cppreference 没有总结这些信息。