o no es válido C++: ¿por qué se compila este código?
Aquí hay una aplicación C++ muy simple que hice con QtCreator:
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
if (a < 1 or b > 3)
{
return 1;
}
return 0;
}
Para mí, esto no es C++ válido, ya que la palabra clave o no es una palabra clave reservada.
Pero si compilo y lo corro, ¡funciona bien sin advertencias ! El código de salida es 0 y si cambio b = 4, el código de salida es 1 !
No estoy incluyendo nada para asegurarme de que no haya una definición oculta.
Esto es realmente extraño para mí. ¿Es esto algo que Qt está definiendo ? No encontré nada en el documentación al respecto.
3 answers
De acuerdo con Wikipedia :
C++ define las palabras clave para que actúen como alias para un número de símbolos que funcionan como operadores: and ( & & ), bitand (&), and_eq ( & = ), or ( / / ), bitor ( / ), or_eq ( / = ), xor ( ^ ), xor_eq ( ^ = ), not (!), not_eq (!= ), compl (~).
Como MadKeithV señala, estos reemplazos vinieron de la iso646 de C.h, y se incluyeron en ISO C++ como palabras clave del operador. El artículo de Wikipedia para iso646.h dice que la razón de estos palabras clave era de hecho para teclados internacionales y otros no QWERTY que podrían no haber tenido fácil acceso a los símbolos.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:53:17
or
es una palabra clave de C++, y se le permite usarla en lugar de ||
. No hay magia.
Lo mismo ocurre con and
y la mayoría de los otros operadores lógicos. Por lo general, es mejor atenerse a los nombres comúnmente conocidos, sin embargo, para evitar confusiones como esta. Si usas or
, alguien se preguntará" por qué compila esto";)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-16 14:35:35
Iso646.h define una serie de alternativas de operador - es parte del estándar C++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-09-16 14:38:04