为了在if语句中使用我的类,要重载哪个运算符?

时间:2013-03-25 13:57:18

标签: c++ operator-keyword overwrite

例如,我已经定义了一个类

class MyClass
{
   ....
};

为了与MyClass对象进行if比较,我必须重载哪个运算符?

例如:

MyClass cc;
if ( cc ) // compile error
{
   //do some stuff
}

我试过

 bool operator == ( int value ) ; //guess the if () will call this

 bool operator != ( int value ) ;   

但两者都给我一个编译错误!

4 个答案:

答案 0 :(得分:6)

您应该提供bool转换运算符:

struct MyClass
{
  explicit operator bool() const { return true; }   
};

此处,explicit运算符用于防止对其他类型(特别是数字类型)进行不必要的隐式转换。请注意,这只能在C ++ 11之后实现。

答案 1 :(得分:4)

operator bool()是您想要的。它负责从您的类类型转换为bool类型。

答案 2 :(得分:4)

您必须为bool或可转换为bool的内容提供转换运算符。如果你有C ++ 11,最好的方法是:

class MyClass
{
public:
  explicit operator bool () const {
    ...
  }
};

如果您没有C ++ 11(或者至少它支持显式转换运算符),事情会变得有点棘手(因为隐式转换可能会让您在最不期望的时候感到痛苦)。有关详细信息,请参阅safe bool idiom

答案 3 :(得分:2)

您可以覆盖operator bool(),但根据您的示例,您可能还会考虑创建将返回bool的简单方法。然后它的用法可以是这样的:

MyClass cc;
if (cc.isValid())
{
   // do some stuff
}

在这种情况下会更直接,也更容易阅读。自定义运算符对很多东西都很好,但不要强迫它。有时最好只 keep it simple :)