2

例如,我定义了一个类

class MyClass
{
   ....
};

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

例如:

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

我试过了

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

或者

 bool operator != ( int value ) ;   

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

4

4 回答 4

6

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

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

在这里,explicit运算符用于防止不必要的隐式转换为其他类型,特别是数字类型。请注意,这只能从 C++11 开始。

于 2013-03-25T14:00:15.707 回答
4

operator bool()是你想要的那个。它负责从您的 class 到 type 的类型转换bool

于 2013-03-25T13:59:20.367 回答
4

您必须为bool可转换为bool. 如果你有 C++11,最好的方法是:

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

如果您没有 C++11(或者至少它不支持显式转换运算符),事情会变得更加棘手(因为当您最不期望的时候,隐式转换会让您非常痛苦)。有关这方面的更多信息,请参阅安全布尔成语

于 2013-03-25T14:02:47.473 回答
2

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

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

在这种情况下,这会更直接,也更容易阅读。自定义操作符对很多事情都很有用,但不要强迫它。有时最好保持简单:)

于 2013-03-25T14:01:46.737 回答