2012-01-21 62 views
3

操作我的意思是,大家都知道有否定邏輯運算符!,它可以這樣使用:是否有一個「正常」的一元邏輯在C++

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

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

是否有任何操作,使這個:

if (f) 
    // Do Something 

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

+0

通過定義運算符bool(),您可以得到您想要的結果。 – maress

+0

@maress:是的,我們已經介紹過了。 –

+0

可能的重複http://www.artima.com/cppsource/safebool.html –

回答

7

可以聲明和隱式轉換定義operator bool()bool,如果你careful

或寫:

if (!!f) 
    // Do something 
+0

我知道我可以這樣做,但是沒有直接的操作員嗎? –

+1

@ Mr.TAMER:操作符bool()如何不是_direct_? –

+0

哇!它確實是:O –

2
operator bool() { //implementation }; 
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(); 
    } 
}; 
相關問題