Или недействителен С++: почему этот код компилируется?
Вот очень простое приложение С++, которое я сделал с 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 определяет ряд альтернатив оператора - это часть стандарта С++.