例如,我已经定义了一个类
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 ) ;
但两者都给我一个编译错误!
答案 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 :)