2012-05-02 17 views
7

Eventuali duplicati:
Double Negation in C++ codesta usando '!!' in C/C++ buone pratiche ed è comune?

Per quanto ne so, nessuno C/C++ libri tutorial o manuali menzionano questa tecnica. Forse perché è solo una piccola cosa, non degno di nota.

lo uso perché C/C++ mescola tipo bool con int, long, puntatore, doppio ecc ... insieme. È molto comune dover convertire un bool non bool. Non è sicuro usare il valore (bool) per farlo, quindi io uso !! per farlo.

Esempio:

bool bValue = !!otherValue; 
+0

Non ho sentito alcun problema con esso. – chris

+6

"Non è sicuro usare il valore (bool) per farlo" Perché? –

+1

La questione è stata già discussa qui: http://stackoverflow.com/questions/248693/double-negation-in-c-code e http://stackoverflow.com/questions/8617090/double-negation-in-c- is-it-guaranteed-to-return-0-1 – Juliano

risposta

9

Credo !! è abbastanza chiaro in confronto ad alcune delle altre scelte, quali:

if (foo) 
    bar = 1; 
else 
    bar = 0; 

o bar = foo ? 1 : 0;

Dal !! fa esattamente una cosa, lo trovo molto ambiguo.

+5

Bene, sono d'accordo che è ok, ma '!! foo' è * less * ambiguo di' foo? 1: 0'? Non posso essere d'accordo. –

+0

@ Eds. Heh, infatti, ho postato principalmente per contrastare il tuo post - non ero d'accordo con il tuo punto di vista, e ho pensato che avremmo lasciato decidere i voti. Finora sei in vantaggio. :) – sarnold

+0

+1 per la votazione –

5

In questo caso preciso:

bool bValue = !!otherValue; 

non c'è bisogno di scrivere !!. Essa funzionerà benissimo senza di loro:

bool bValue = otherValue; 

Credo che in maggior parte dei casi di fusione implicita sarà bello.

+0

cast implicito (quando può causare il troncamento dei dati) provoca avvisi del compilatore, cast esplicito (tramite gli operatori in questo caso) non lo fa. – ildjarn

19

Va bene, qualsiasi C o C++ programmatore dovrebbe riconoscerlo, ma preferirei qualcosa di più esplicito come

(x != 0) 
+2

+1 Codice più chiaro è il codice migliore – Juliano

Problemi correlati