应该是操作员!如果已经定义了bool()运算符,则在类中定义()



我有一个简单的类,它是一个具体的类,并不是为继承而设计的。我也想说!myobject,其中myobject是此类的实例。我已经定义了operator bool()。我是否也应该定义bool operator!()

以下是该类的一个琐碎示例:

class Test
{
public:
...
explicit operator bool() {
return error_ == 0;
}
bool operator!() {
return error_ != 0;
}
private:
int error_;
};

我将其作为!myobject进行了尝试,它的工作独立于是否定义了!()运算符。看起来这是一个愚蠢的问题,但我找不到答案。

根据C++17标准(8.3.1一元运算符(

9逻辑求反运算符的操作数!在上下文中转换为bool(第7条(;如果转换后的操作数为false,否则为false。结果的类型为bool。

因此无需重载运算符!((当存在到类型bool的转换运算符时。

在类中使用运算符bool((const:

explicit operator bool() const {
return error_ == 0;
}

并且不需要定义过载CCD_ 5。

最新更新