是否有#34;正常" C ++中的一元逻辑运算符

时间:2012-01-21 17:53:12

标签: c++ operators logical-operators unary-operator

我的意思是,我们都知道存在否定逻辑运算符!,它可以像这样使用:

class Foo
{
public:
    bool operator!() { /* implementation */ }
};

int main()
{
    Foo f;
    if (!f)
        // Do Something
}

是否有任何允许此操作符的操作符:

if (f)
    // Do Something

我知道这可能不重要,但只是想知道!

3 个答案:

答案 0 :(得分:7)

如果您 careful ,则可以声明并定义operator bool()隐式转换为bool

或写:

if (!!f)
   // Do something

答案 1 :(得分:3)

由于operator bool()本身非常危险,我们通常使用名为safe-bool idiom的东西:

class X{
  typedef void (X::*safe_bool)() const;
  void safe_bool_true() const{}
  bool internal_test() const;
public:
  operator safe_bool() const{
    if(internal_test())
      return &X::safe_bool_true;
    return 0;
  }
};

在C ++ 11中,我们得到了显式转换运算符;因此,the above idiom is obsolete

class X{
  bool internal_test() const;
public:
  explicit operator bool() const{
    return internal_test();
  }
};

答案 2 :(得分:2)

operator bool() { //implementation };