【发布时间】:2014-05-01 19:20:52
【问题描述】:
第 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';
}
【问题讨论】:
-
为什么你认为它不应该?标准也没有特别说明
int的这些运算符。 -
@MikeSeymour §5.10 也没有说明枚举类。
-
@WakeupBrazil:确实,它遵循 5.9。我已将我的评论扩展到答案,因为它并非完全微不足道。
-
@PeterHorvath 因此我的经验主义回答,这些事情导致了 GNUC,以及许多其他最终成为标准的事情(例如 BOOST)
-
@PeterHorvath 我觉得你对委员会成员的描述相当傲慢。
标签: c++ c++11 enums operator-overloading language-lawyer