2009-11-09 16 views
5

pregunta de ocio/curiosidad como está implícito en el título.¿Qué operadores lógicos de C++ usa: y, o, no, y los operadores de estilo il o C? ¿por qué?

Personalmente, prefiero los nuevos operadores para hacer que el código sea más legible en mi opinión.

¿Cuáles usar? ¿Cuál es su razón para elegir una sobre la otra?

también Emacs destaca esos operadores de manera diferente, así que obtengo más información visual al mirar la pantalla. Sé que los operadores antiguos también se pueden resaltar, pero el ISO646 resaltado de forma predeterminada

+0

ver también: http://stackoverflow.com/questions/1103313/is-anybody-using-the-named-boolean-operators stefaanv

+0

Wow, que ya había respondido a esa pregunta anterior con casi la misma respuesta! Marcado este como un idiota. –

Respuesta

6

No utilizaré los operadores alternativos ya que causan más confusión que claridad en mi opinión.
Si veo un nombre alfabético, espero un espacio de nombre, clase, variable, función o un operador de estilo de función: los operadores comunes dividen esto intuitivamente en secuencias para mí. El estilo alternativo simplemente no encaja en el mundo de C/C++.

Además, aunque Greg tiene algo que decir sobre las personas que son nuevas en C o C++, te acostumbras muy pronto. No tengo problemas para detectar ! en cualquier lugar.

2

Utilizo los anteriores.

Motivo: He codificado en Perl por un tiempo y los operadores tienen diferente precedencia dependiendo de si son la variante detallada o no. Me encontré con un par de errores debido a esto y desde entonces siempre uso &&, || y ! sobre la variante detallada para cualquier idioma que los tenga.

+0

PHP tiene esos problemas también. Reemplazando '($ a o $ b)' con '($ a || $ b)' corrigió un error, y en ese momento me cansé por completo del lenguaje. – Tom

3

¿Se refiere a los tokens alternativos procedentes de iso646.h?

Son de C y es muy raro de ver, por lo tanto, es probable que sean menos legibles para la mayoría. Estoy seguro de que si nos hubieran "criado" con estas palabras clave, serían más comunes, ya que leen mejor el inglés.

Por otra parte, && permite que los que no hablan inglés digan "y" en su lengua materna. (No es que esto era una preocupación en las palabras clave en el primer lugar.)

+0

Pero ciso646.h contiene ... nada ?? –

+0

¿Qué? Para mí, Visual Studio 2008, hace lo esperado '#include ', que tiene las macros. Estoy seguro de que g ++ es lo mismo. – GManNickG

+0

'' en C contiene 'y',' y_eq', etc. como macros, pero '' (según el apéndice C de la norma) debe excluir las macros 'y',' y_eq', etc., ya que son palabras clave en C++, lo que hace '' el encabezado más inútil en el estándar (en mi humilde opinión). Sin embargo, se sabe que VS es no conforme en este sentido, por lo que podría explicar qué es el archivo de cabecera. –

8

Yo prefiero usar not en lugar de ! porque es mucho más fácil de leer:

if (not condition()) { 
} 

frente

if (!condition()) { 
} 

El tipo ! se pierde allí. Por supuesto, esto debe evitarse (o #define d) cuando se escribe código destinado a ser portátil. Sin embargo, and y or no hacen mucho por mí, entonces no los uso.

+15

'if (not condition())' es una abominación blasfema del infierno. –

+0

No estoy de acuerdo con la legibilidad. ¡Pero eso es porque estoy tan acostumbrado a! operador. Entrenar mi cerebro para leer no como un operador es un proceso no trivial a mi edad. –

+0

Me gusta usar 'not',' and', 'or', incluso más ya que trabajo con python. Emacs los resalta de manera predeterminada, encuentro que 'not' en particular es más legible, y son más rápidos para escribir IMO. – rafak

11

no creo que he visto incluso C código fuente C/++ que utiliza realmente los operadores alfabéticos. Para mí, simplemente se ve extraño; muy poco-C-ish.

+4

Nunca supo que existían hasta ahora. –

1

Los tokens alternativos para operadores lógicos (y no solo lógicos), como and, or, not etc. no tienen nada que ver específicamente con C++. También estuvieron presentes en C, prácticamente desde el principio. Si desea utilizarlos en su código, puede hacerlo, pero no se sorprenda si la gente considera que esta práctica es poco ortodoxa. Normalmente las personas usan designadores tradicionales para estos operadores (por ejemplo, &&, || y así sucesivamente) en los códigos C y C++.

+3

No. 'y',' o', 'no', etc. son _specific_ a C++. Son _keywords_ en C++. No puedes elegir prescindir de ellos. Son macros estándar en C, pero si no incluye , no los obtiene. –

+0

Bueno, no quiero reiniciar el debate sobre si los tokens alternativos son palabras clave o no. En mi opinión, la redacción del estándar (C++ 98 al menos) es bastante clara: son * no * palabras clave. Aunque es cierto que no son macros en C++. – AnT

+0

Lo sentimos, tienes razón, no son palabras clave, son tokens alternativos. De cualquier forma, son específicos de C++ (como se oponen a C, donde definitivamente son macros). –

Cuestiones relacionadas