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.

Foi útil?

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 ++ .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top