考虑:
enum class Number {one, two};
if (Number::one < Number::two)
{}
我的理解是,需要将作用域枚举大小写为基础类型或整数,然后可以将其应用于运算符<> ==。但是看起来上面的代码片段可以在没有任何显式重载运算符<
的情况下正常工作。
在 Enumeration declaration 中看不到任何说明。
对于默认范围内的枚举默认支持哪些运算符,C ++标准怎么说?
答案 0 :(得分:12)
如果您指的是“通常的算术转换”,则是的,当参数是算术或枚举类型时,它们就完成了。只是针对范围内的枚举有一个特殊的符号:
[expr]
11许多期望算术或 枚举类型原因转换和收益结果类型类似 办法。目的是产生一个通用类型,这也是 结果。这种模式称为通常的算术转换, 定义如下:
- 如果任何一个操作数都属于范围枚举类型,则不执行任何转换;如果另一个操作数的类型不同,则表达式格式错误。
因此,这里讨论了这种情况。由于这两个操作数具有相同的作用域枚举类型,因此只需检查它们是否以一种期望的方式保存特定的关系即可。
答案 1 :(得分:10)
我的理解是,作用域枚举需要被区分为基础类型或整数,然后才能应用于运算符<> ==。
两个都为作用域枚举时不行。 SomeScopedEnum < SomeInt
格式错误,在这种情况下,您是对的。
如果两个操作数(转换后)均为算术或枚举类型,则如果指定的关系为true,则每个运算符应产生
true
,如果为false,则产生false
。