Письменные версии логических операторов


этой - это единственное место, где я когда-либо видел and,or и not перечислены как фактические операторы в C++. Когда я написал тестовую программу в NetBeans, я получил красное подчеркивание, как будто была синтаксическая ошибка, и понял, что веб-сайт был неправильным, но это NetBeans, который ошибается, потому что он скомпилирован и работает так, как ожидалось.

Я вижу ! милости свыше not но читабельность and &&or похоже больше, чем их грамматические братья. Почему существуют эти версии логических операторов и почему, казалось бы, никто их не использует? Это действительно действительный C++ или какая-то совместимость с C, которая была включена в язык?

3 80

3 ответа:

они возникли в C в заголовке <iso646.h>. В то время были клавиатуры, которые не могли ввести необходимые символы для && (например), поэтому заголовок содержал #defineэто помогло бы им в этом, определив (в нашем примере)and на &&. Конечно, со временем это стало реже.

в C++ они стали тем, что известно как альтернативные маркеры. Вы делаете не нужно включите все, чтобы использовать эти маркеры в совместимом компиляторе (как таковой, c++-ified версия заголовка C,<ciso646>, является пустым). Альтернативные маркеры такие же, как обычные маркеры, за исключением орфографии. Так что во время разбора and - это ровно то же самое, что &&, это просто другой способ написания того же самого.

Что касается их использования: поскольку они редко используются, их использование часто более удивительно и запутанно, чем полезно. Я уверен, что если бы это было нормально, их было бы гораздо легче читать, но люди так привыкли && и || все остальное просто отвлекает.

EDIT: я видел очень небольшое увеличение их использования с тех пор, как я опубликовал это, однако. Я все еще избегаю их.

Они существуют для удобства использования (поддержка символов в клавиатуре/дисплеях) и общей читаемости, но есть еще одна причина, которая в настоящее время более выражена. Почти ни один из ответов здесь,здесь, или даже главный ответ здесь изложите основную причину, по которой многие из нас предпочитают версии слов над версиями символов (и основная причина, по которой их используют другие языки): ошибки. Различия между версиями слов очень заметны. Этот различия между версиями символов заметно меньше, вплоть до заманчивых ошибок в сравнительно большей степени: "x|y" очень сильно не "x||y", но при внедрении в более крупное выражение многие из нас упускают разницу. Это похоже на обычное случайное смешивание оператора присваивания и равенства. По этой причине я отучил себя от версий символов (это было нелегко) в пользу версий слов. Я бы предпочел, чтобы кто-то сделал двойную попытку из-за нашей любви из старых вещей, чем искушать Жуков.

В C++, это реальные слова. В C, они макросы, определенные в <iso646.h>. См http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html.