【发布时间】:2014-01-08 03:49:11
【问题描述】:
我遇到了一个我自己无法回答的问题。另外,我在谷歌和这里都没有找到答案。比如说,我想在 if 子句中“检查对象的有效性”,如下所示:
MyClass myObject;
// [some code, if any]
if (!myObject)
{
// [do something]
}
让MyClass 定义如下:
class MyClass
{
public:
MyClass() { };
virtual ~MyClass() { };
bool operator!()
{
return !myBool;
};
operator bool()
{
return myBool;
};
private:
bool myBool = 0;
};
我现在的问题是:在这个 if 子句中实际使用了哪一个重载运算符?不管怎样,结果显然是一样的。
【问题讨论】:
-
我认为它会走阻力最小的道路,并致电
operator!... -
在读完这篇文章之前不要考虑重载 bool:stackoverflow.com/questions/6242768/…
-
是的,只需执行
operator bool并明确说明即可。无论如何,operator!不需要转换。operator bool需要用户定义的转换。 -
@doctorlove 完美主义ftw!完成:-)
-
只是一个问题:使用
operator bool()真的有意义吗?这可能是最常见的运算符重载滥用之一(包括在std::ios_base中);一个成员函数isValid(),或者其他的,要清楚得多。
标签: c++ overloading operator-keyword