2012-01-21 1 views
3

Je veux dire, nous savons tous qu'il ya la négation opérateur logique !, et il peut être utilisé comme ceci:est-il un « normal » opérateur unaire logique en C++

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

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

est-il un opérateur qui permet ceci:

if (f) 
    // Do Something 

Je sais que ce n'est peut-être pas important, mais je me demandais juste!

+0

en définissant l'opérateur bool(), vous obtenez ce que vous voulez. – maress

+0

@maress: Oui, nous avons couvert cela. –

+0

Copie possible de http://www.artima.com/cppsource/safebool.html –

Répondre

7

Vous pouvez déclarer et définir operator bool() pour la conversion implicite à bool, si vous êtes careful.

ou écrire:

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

Je sais que je pourrais le faire de cette façon, mais n'y a-t-il pas d'opérateur direct? –

+1

@ Mr.TAMER: Comment 'operator bool()' n'est pas _direct_? –

+0

Wow! c'est vraiment: O –

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

nous employons habituellement Depuis operator bool() en lui-même est assez dangereux, ce qu'on appelle le 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; 
    } 
}; 

En C++ 11, nous obtenons la conversion explicite les opérateurs; en tant que tel, the above idiom is obsolete:

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