Или недействителен С++: почему этот код компилируется?

Вот очень простое приложение С++, которое я сделал с QtCreator:

int main(int argc, char *argv[])
{
    int a = 1;
    int b = 2;

    if (a < 1 or b > 3)
    {
       return 1;
    }
    return 0;
}

Для меня это недопустимо С++, поскольку это ключевое слово или не зарезервированное ключевое слово.

Но если я его компилирую и запускаю, он отлично работает без каких-либо предупреждений! Код выхода равен 0, и если я изменяю b = 4, код выхода равен 1!

Я не включаю ничего, чтобы убедиться, что скрытого определения нет.

Это действительно странно для меня. Является ли это чем-то Qt определяющим? Я ничего не нашел в документации относительно этого.

Ответ 1

Согласно Wikipedia:

С++ определяет ключевые слова для работы как псевдонимы для ряда символов, которые функционируют как операторы: и (&), бит и (&), and_eq (& =) или (||), bitor (|), or_eq (| =), xor (^), xor_eq (^ =), not (!), not_eq (! =), compl (~).

Как MadKeithV указывает, эти замены были получены от C iso646.h и были включены в ISO С++ в качестве ключевых слов оператора. В статье Wikipedia для iso646.h говорится, что причина этих ключевых слов действительно для международных и других клавиатур, отличных от QWERTY, которые, возможно, не имели легкого доступа к символам.

Ответ 2

or - ключевое слово С++, и вам разрешено использовать его вместо ||. Нет волшебства.

То же самое касается and и большинства других логических операторов. Обычно лучше придерживаться общеизвестных имен, чтобы избежать путаницы. Если вы используете or, кто-то задается вопросом "зачем это компилируется";)

Ответ 3

iso646.h определяет ряд альтернатив оператора - это часть стандарта С++.