Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过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 referencethis reference on implicit conversions(尤其是有关integral promotionintegral conversions的部分)。

09-30 17:13
查看更多