【发布时间】:2016-02-05 11:45:53
【问题描述】:
为什么允许以下运算符重载?
enum class e { a, b, };
constexpr
bool operator == (e l, e r)
{ return l != r; }
constexpr
bool operator != (e l, e r)
{ return !(l == r); }
static_assert(e::a == e::b, "==");
static_assert(e::a != e::a, "!=");
我总是将enums 视为内置类型。我不能为指向我的自定义类型的指针重新定义operator ==(但我想要!),但可以为相同类型的一对enum 执行此操作。但是两者都有内置版本的operator == 和operator !=。
这种(似乎是错误的)事情的可能目的是什么?如何利用它获利?
【问题讨论】:
-
这有什么问题?
-
我的意思是这样定义操作符没有多大意义,但除此之外对我来说看起来完全没问题
-
@tobi303 我总是将
enums 视为内置类型。我不能为int重新定义operator ==,但可以为enum重新定义。 -
我猜你想知道可能的递归问题?
-
@JoachimPileborg 没有递归。第二个运算符未前向声明。
标签: c++ c++11 enums operator-overloading