对于枚举类,C++ Standard没有说运算符!=()和运算符==()

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)

Mik*_*our 6

内置运算符在5.10中指定:

==(等于)和!=(不等于)运算符具有与关系运算符相同的语义限制,转换和结果类型,除了它们的优先级和真值结果.

这将规范推迟到5.9中的关系运算符的规范; 对于由5.9/5指定的枚举:

如果两个操作数(转换后)都是算术或枚举类型,则每个运算符如果指定的关系为真,则应为true,如果为假,则为false.

因此,正如人们所预料的那样,比较运算符适用于枚举,比较数值.