c++ - 重载否定运算符的反义词?

标签 c++ c++11

<分区>

重载否定运算符很简单:

bool MyClass::operator!() const
{
    //return whatever comparison needs to be done
}

然后我可以写:

MyClass a;
if(!a)
{
    //Do something
}

但我希望能够写:

if(a)
{
    //Do something
}

我该怎么做?

最佳答案

if 语句中的表达式将被转换为 bool。因此,您需要做的是让您的类可转换为 bool。这可以通过定义转换运算符来实现:

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

完成此操作后,您不再需要 operator! 的重载,因为 bool 可以在转换后取反。

关于c++ - 重载否定运算符的反义词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56990620/

相关文章:

c++ - 编译器在初始化大型 std::arrays 时挂起

c++ - 练习: split the array values into positive and negative arrays

c++ - 双重免费或损坏(如果重新订购行则运行正常)

c++ - 如何优化 C++ 类容器的加法运算符?

c++ - 如何在 lex 中捕获多行

c++ - 在 C++11 中使用用户定义的转换重载运算符推导

c++ - 可以使用移动/交换 c++11 来延长返回的临时变量的生命周期吗

c++ - 在 C++11 中定义 lambda 函数不会在类内部编译

c++ - 调试 Win32 API 应用程序是否存在内存泄漏

c++ - 创建从一种类型到另一种类型的别名