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

StackOverflow https://stackoverflow.com/questions/1433345

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

Согласно Википедии :

  

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

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

Другие советы

или - это ключевое слово C ++, и вы можете использовать его вместо || . В этом нет магии.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top