2012-01-21 8 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

あなたはcarefulしている場合は、boolへの暗黙的な変換のためのoperator bool()を宣言して定義することができます。

または書き込み:

if (!!f) 
    // Do something 
自体に operator bool()はかなり危険ですので
+0

私はこのようにすることができますが、ダイレクトオペレータはありませんか? –

+1

@ Mr.TAMER: 'operator bool()'はどのように_direct_ではありませんか? –

+0

うわー! O –

2
operator bool() { //implementation }; 
3

は、我々は通常、何かを採用呼ばsafe-bool idiom:C++ 11では

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; 
    } 
}; 

、我々は明示的な変換を取得します演算子;そのように、the above idiom is obsolete

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