Wak*_*zil 0 c++ enums operator-overloading language-lawyer c++11
第7.2节枚举声明没有说明有关范围枚举的内容operator!=()
和内容operator==()
.但是下面的代码编译.
#include <iostream>
enum class Month{jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov , dec};
int main()
{
Month a = Month::feb;
Month b = Month::jul;
Month c = a;
if( a != b ) std::cout << "a |= b" << '\n';
if( a == c ) std::cout << "a == c" << '\n';
}
Run Code Online (Sandbox Code Playgroud)
内置运算符在5.10中指定:
==(等于)和!=(不等于)运算符具有与关系运算符相同的语义限制,转换和结果类型,除了它们的优先级和真值结果.
这将规范推迟到5.9中的关系运算符的规范; 对于由5.9/5指定的枚举:
如果两个操作数(转换后)都是算术或枚举类型,则每个运算符如果指定的关系为真,则应为true,如果为假,则为false.
因此,正如人们所预料的那样,比较运算符适用于枚举,比较数值.