2011-03-12 11 views
9

Sí, esto es válido C++:y, o, no contra &&, ||,!

if (false or (true and not false)) ... 

Among others como bitand y xor. En C, solían ser macros, pero ahora ellos are keywords! ¡Incluso puedes sobrecargarlos! Entonces, ¿por qué alguien alguna vez enseñar o escribir algo como:

if (false || (true && !(false))) ... 

¿Por qué nadie usarlos?

+0

"En C, solían ser macros" No, nunca fueron macros "en C", aunque algunos programas C individuales pueden haber definido tales macros. Adn, esta no es una pregunta real, es obstinada y controvertida: consulta las preguntas frecuentes. –

+0

posible duplicado de [¿Alguien usa los operadores booleanos nombrados?] (Http://stackoverflow.com/questions/1103313/is-anybody-using-the-named-boolean-operators) [¿Qué operadores lógicos de C++ usas? y, o, no, y los operadores de estilo ilk o C? ¿por qué?] (http://stackoverflow.com/questions/1103313/is-anybody-using-the-named-boolean-operators); ver también [¿tokens alternativos C++?] (http://stackoverflow.com/questions/555505/c-alternative-tokens) [¿Es posible desactivar el soporte para "y"/"o" ​​boolean operator use in gcc?] (http://stackoverflow.com/questions/1069352) –

+1

@Jim Balter: Pero en C, _are_ macros, definidas en 'iso646.h'. –

Respuesta

6

Porque no permiten el código mixto C/C++ sin incluir archivos de encabezado adicionales, son menos conocidos por los programadores, y no está claro si and es la versión de corto circuito o bit a bit.

+2

Sí, entre '&' y '&&' es mucho más fácil adivinar cuál es un operador bit a bit que entre 'y' y' bitand'. Sin embargo, es desafortunado que 'not_eq' es una relación, mientras que' or_eq' es un operador de asignación compuesto, que irónicamente es bitwise. –

2

¿Por qué nadie? Algunos los usan. Otros piensan que los símbolos son más legibles que las palabras.

1

La gente simplemente no los conoce (yo no hasta ahora).

2

Visual C++ no los admite.

+0

Microsoft Visual C++ requiere para ser incluido con el fin de utilizar estos identificadores, agregando otra dependencia inútil a algo que debería estar en el lenguaje base. (o no debería, pero no debe sentarse en el medio) – Tic

Cuestiones relacionadas