第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';
}
答案 0 :(得分:6)
内置运算符在5.10中指定:
==(等于)和!=(不等于)运算符与关系运算符具有相同的语义限制,转换和结果类型,除了它们的优先级和真值结果较低。
这将规范推迟到5.9中的关系运算符的规范;对于由5.9 / 5指定的枚举:
如果两个操作数(转换后)都是算术或枚举类型,则如果指定的关系为true,则每个运算符应为true,如果为false则为false。
因此,正如人们所预料的那样,比较运算符适用于枚举,比较数值。
答案 1 :(得分:2)
来自C ++标准
5.10 Equality运算符[expr.eq] 1 ==(等于)和!=(不等于)运算符组从左到右。操作数应具有 算术,枚举,指针或指向成员类型的指针,或 输入std :: nullptr_t。运算符==和!=都生成true或false, 即bool类型的结果。在下面的每种情况下,操作数应为 在应用指定的转换后,它们具有相同的类型。
如您所见,枚举可以在等式运算符中使用,而不是它们是作用域还是未作用域
答案 2 :(得分:1)
枚举的WHOLE POINT是一个相等(而不是)的测试。 int
有一个订单,1&lt; 2,但是EMPTY
WHITE
和BLACK
(如果你有一个奥赛罗董事会说,我正在努力做一个2小时前)WHITE
&gt; BLACK
,WHITE%EMPTY
怎么样,不,但是整点都是如此我可以说
switch(board.get_square(x,y)) {
case Piece::WHITE:
magic();
break;
case Piece::BLACK:
whatever();
break;
default:
}
当然是enum class Piece;
。
案例就像我所说的平等比较:
if(board.get_square(x,y) == Piece::WHITE) {
或其他什么。