如何覆盖C ++类中的bool运算符?

时间:2011-04-29 07:57:11

标签: c++ operators operator-overloading

我在C ++中定义了一个ReturnValue类,需要报告方法是否成功。我希望类的对象在成功时评估为true,在出错时评估为false。我会覆盖哪个运算符来控制班级的真实性?

4 个答案:

答案 0 :(得分:18)

简单的答案是提供operator bool() const,但您可能需要查看safe bool idiom,而不是转换为bool(可能会被隐式转换为其他整数类型)转换为一种不同的类型(指向私有类型的成员函数的指针),它不接受这些转换。

答案 1 :(得分:8)

好吧,你可以重载operator bool()

class ReturnValue
{
    operator bool() const
    {
        return true; // Or false!
    }
};

答案 2 :(得分:3)

重载此运算符:

operator bool();

答案 3 :(得分:0)

最好使用 explicit 关键字,否则会干扰其他重载,例如 operator +

这里是一个示例:

class test_string
{
public:
   std::string        p_str;

   explicit operator bool()                  
   { 
     return (p_str.size() ? true : false); 
   }
};

和用途:

test_string s;

printf("%s\n", (s) ? s.p_str.c_str() : "EMPTY");