ou não é válido C ++: por que esta compilação de código?
-
07-07-2019 - |
Pergunta
Aqui é uma aplicação muito simples C ++ que fiz com QtCreator:
int main(int argc, char *argv[])
{
int a = 1;
int b = 2;
if (a < 1 or b > 3)
{
return 1;
}
return 0;
}
Para mim, isso não é válido C ++, como a palavra-chave ou não é uma palavra-chave reservada.
Mas se eu compilar e executá-lo, ele funciona muito bem sem qualquer aviso! O código de saída é 0 e se eu mudar b = 4, o código de saída é 1!
Eu não estou incluindo qualquer coisa para se certificar de que não há está escondido definir.
Isto é realmente estranho para mim. Isto é algo Qt é a definição? Eu não encontrar nada na documentação sobre isso.
Solução
De acordo com a Wikipedia :
C ++ keywords define para atuar como aliases para um número de símbolos que função como operadores: AND (&&), bitand (&), and_eq (& =) ou (||), BITOR (|), or_eq (| =) (!), XOR (^), xor_eq (^ =), não, not_eq (! =), compl (~).
Como MadKeithV aponta , estas substituições veio iso646.h de C, e foram incluídos na ISO C ++ como palavras-chave de operador. O artigo da Wikipedia para iso646.h diz que a razão para essas palavras-chave era de fato para teclados não-QWERTY internacionais e outros que podem não ter tido acesso fácil aos símbolos.
Outras dicas
or
é uma palavra-chave C ++, e você está autorizado a usá-lo em vez de ||
. Não há mágica.
O mesmo vale para and
ea maioria dos outros operadores lógicos. Em geral, é melhor ficar com os nomes comumente conhecidas, porém, para evitar confusão como esta. Se você usar or
, alguém vai perguntar "por que faz isso de compilação";)
iso646.h define uma série de alternativas de operador - é parte do padrão C ++ .