【问题标题】:How do I override the bool operator in a C++ class?如何覆盖 C++ 类中的 bool 运算符?
【发布时间】:2011-08-15 07:53:12
【问题描述】:

我在 C++ 中定义了一个ReturnValue 类,它需要报告一个方法是否成功。我希望类的对象在成功时评估为true,在错误时评估为false。我应该重写哪个运算符来控制我的类的真实性?

【问题讨论】:

标签: c++ operators operator-overloading


【解决方案1】:

最好使用 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");

【讨论】:

  • 考虑explicit operator bool() const noexcept
【解决方案2】:

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

【讨论】:

  • 如果您使用最新的编译器,您可以使用新的 C++0x 功能explicit operator bool() 来避免隐式转换。
  • 非常好!为了简单起见,我可能会在我当前的用例中使用简单的operator bool() const,但安全的布尔成语似乎更适合实际生产代码。不过,C++ 迫使你陷入这样的疯狂,这有点令人遗憾。 :-/
  • @Bo,很幸运,因为这是一个个人项目,我可以选择我的编译器,而 GCC 4.5 支持这一点。谢谢!
  • @Bo,如果您将此作为答案,我会接受,因为这无疑是处理课程真实性的最佳方式。哦,还有来自斯德哥尔摩的问候! :)
【解决方案3】:

重载这个操作符:

operator bool();

【讨论】:

    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-21
      • 1970-01-01
      • 2012-07-09
      • 1970-01-01
      相关资源
      最近更新 更多