2012-05-02 11 views
7

Duplicar posible:
Double Negation in C++ codeEstá usando '!!' en buenas prácticas C/C++ y es común?

Por lo que yo sé, ningún C/C++ libros tutoriales o manuales mencionan esta técnica. Tal vez porque es solo una cosita pequeña, que no vale la pena mencionar.

Lo uso porque C/C++ mezcla el tipo de bool con int, largo, puntero, doble etc ... juntos. Es muy común que necesite convertir un bool no bool. No es seguro usar el valor (bool) para hacer eso, así que uso !! para hacerlo.

Ejemplo:

bool bValue = !!otherValue; 
+0

No he oído hablar de ningún problema con él. – chris

+6

"No es seguro usar el valor (bool) para hacer eso" ¿Por qué? –

+1

Este asunto ya fue discutido aquí: http://stackoverflow.com/questions/248693/double-negation-in-c-code y http://stackoverflow.com/questions/8617090/double-negation-inc-c- is-it-guaranteed-to-return-0-1 – Juliano

Respuesta

9

Creo !! es bastante claro en comparación con algunas de las otras opciones, tales como:

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

o bar = foo ? 1 : 0;

Desde !! hace exactamente una cosa, me resulta muy ambigua.

+5

Bueno, estoy de acuerdo en que está bien, pero '!! foo' es * menos * ambiguo que' foo? 1: 0'? No puedo estar de acuerdo con eso. –

+0

@EdS. Heh, de hecho, publiqué principalmente para contrarrestar tu publicación: no estaba de acuerdo con tu punto de vista, y pensé que dejaríamos que los votos decidieran. Hasta ahora estás bien a la cabeza. :) – sarnold

+0

+1 para la votación –

5

En este caso exacto:

bool bValue = !!otherValue; 

que no es necesario escribir !!. Funcionará bien sin ellos:

bool bValue = otherValue; 

Creo que en la mayoría de los casos la fundición implícita será agradable.

+0

La conversión implícita (cuando puede causar el truncamiento de los datos) causa advertencias en el compilador, el casting explícito (a través de los operadores en este caso) no lo hace. – ildjarn

19

Está bien, cualquier C o programador de C++ debe reconocerlo, pero yo preferiría algo más explícito como

(x != 0) 
+2

+1 Código más claro es mejor código – Juliano

Cuestiones relacionadas