我有一个简单的类,它是一个具体的类,并不是为继承而设计的。我也想说!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。