Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
为什么要遵循运算符重载?
Live example (C++11)。
Live example (C++03)。
我一直认为
这种(似乎是错误的)事情的可能目的是什么?一个人如何可以利用它获利?
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
3年前关闭。
为什么要遵循运算符重载?
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, "!=");
Live example (C++11)。
Live example (C++03)。
我一直认为
enum
是关于内置类型的。我不能为自定义类型的指针重新定义operator ==
(但我想要!),但是可以为同一类型的enum
对实现此功能。但是,两者都具有operator ==
和operator !=
的内置版本。这种(似乎是错误的)事情的可能目的是什么?一个人如何可以利用它获利?
最佳答案
看来这里的问题是,您认为(无范围的)枚举等于整数。就像我在评论中说的那样,枚举值可以在整数之间进行转换,但是它们仍然是自定义类型,您可以为其重载运算符。
参见例如this unscoped enumeration reference和this reference on implicit conversions(尤其是有关integral promotion和integral conversions的部分)。