или не является допустимым C ++: почему этот код компилируется?
-
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 ++ . р>