Это единственное место, которое я когда-либо видел and
, or
и оно not
указано как фактические операторы в C ++. Когда я написал тестовую программу в NetBeans, я получил красное подчеркивание, как если бы произошла синтаксическая ошибка, и решил, что веб-сайт был неправильным, но это NetBeans, который неверен, потому что он скомпилирован и работает, как ожидалось.
Я вижу, !
что меня предпочитают, not
но удобочитаемость and
&& or
кажется лучше, чем их грамматические братья. Почему существуют эти версии логических операторов и почему, казалось бы, никто их не использует? Это действительно действительный C ++ или какая-то совместимость с C, который был включен в этот язык?
c++
language-features
logical-operators
дефектный
источник
источник
||
и&&
, может быть, даже!
временами. Слова всегда лучше, чем «линейный шум», не говоря уже о возможной путанице с операторами манипулирования битами.and
это более читабельно, а затем написать «and
&&or
» :)Ответы:
Они возникли в C в заголовке
<iso646.h>
. В то время были клавиатуры, которые не могли ввести необходимые символы для&&
(например), поэтому в заголовке содержались символы#define
, которые помогли бы им в этом, (в нашем примере) определяяand
как быть&&
. Конечно, со временем это стало меньше использоваться.В C ++ они стали так называемыми альтернативными токенами . Вам не нужно ничего включать, чтобы использовать эти токены в совместимом компиляторе (как таковая, версия заголовка C, связанная с C ++, пуста
<ciso646>
). Альтернативные жетоны похожи на обычные жетоны, за исключением написания. Таким образом , во время синтаксического анализаand
является именно такой же , как&&
, это просто другой способ правописание то же самое.Что касается их использования: поскольку они используются редко, их использование часто более удивительно и сбивает с толку, чем полезно. Я уверен , что если бы это было нормально, они были бы гораздо легче читать, но люди так привыкли
&&
и||
все остальное просто получает отвлекают.РЕДАКТИРОВАТЬ: Однако с тех пор, как я опубликовал это, я заметил очень небольшое увеличение их использования. Я до сих пор их избегаю.
источник
or
илиnot
без включения заголовка.Они существуют для удобства использования (поддержка символов в вариантах клавиатуры / дисплея) и общей читаемости, но есть еще одна причина, которая в настоящее время более очевидна. Почти нет ответов здесь , здесь , или даже основного ответа здесьобъясните основную причину, по которой многие из нас предпочитают версии слова версиям символов (и основная причина, по которой их используют другие языки): ошибки. Различия между версиями слова очень заметны. Различия между версиями символов заметно меньше, что может привести к появлению ошибок в сравнительно большей степени: «x | y» в значительной степени не является «x || y», но когда оно встроено в более крупное выражение, многие из нас упустите разницу. Это похоже на обычное случайное смешивание оператора присваивания и равенства. По этой причине я отказался от версий символов (это было непросто) в пользу версий слов. Из-за нашей любви к старым я бы предпочел, чтобы кто-то их обидел, чем искушал ошибки.
источник
/Za
), чтобы поддерживать альтернативные ключевые слова (см. Stackoverflow.com/a/555524/368896 ). По-видимому, это имеет и другие последствия. Таким образом, в Visual Studio не обязательно следовать этому совету.x | y
он достаточно визуально отличается (в моноширинных шрифтах) отx || y
, но я считаю, что,!
например,if (!f(xyz) && ...
проще пропустить, чемif (not f(xyz) && ...
.and
,or
иnot
в логическом выражении, на самом деле улучшает читаемость и это подчеркивает различие в битовые манипуляции. Таким образом, ИМХО, мы должны подумать об изменении наших любимых старых привычек к лучшему ...and
иor
предвзятое мнение людей о том, как они должны работать? Например,if (a == b or c)
вместоif (a == b || a == c)
- что-то подобное появляется здесь, в StackOverflow, почти каждый день. Абстрактные символы, не связанные с английским языком, уменьшают эти ошибки.В C ++ это настоящие ключевые слова. В C это макросы, определенные в
<iso646.h>
. См. Http://web.archive.org/web/20120123073126/http://www.dinkumware.com/manuals/?manual=compleat&page=iso646.html .источник
and
и&&
функционально такие же в C ++.and
иor
операторы действительно действует C ++ и является частью стандарта языка.Чтобы уточнить другие ответы с бетонным например, есть еще одна причина , кроме просто «читаемости» предпочитают
and
более&&
. Явное указание «и», когда вы имеете в виду логическое «И», исключает возможность мелких ошибок.Учти это:
int x = 3; int y = 4; // Explicitly use "and" if (x and y) { cout << "and: x and y are both non-zero values" << endl; } // Using "&&" if (x && y) { cout << "&&: x and y are both non-zero values" << endl; } // Oops! I meant to type "&&"! if (x & y) { cout << "&: x and y are both non-zero values" << endl; } else { cout << "How did I get here?" << endl; }
Все три оператора if будут компилироваться, но последний означает нечто совершенно иное и непреднамеренное!
Если вы всегда используете,
and
когда имеете в виду логическое И, вы никогда не сможете случайно набрать один «&», и ваш код будет успешно скомпилирован и запустится с загадочными результатами.Еще одно хорошее упражнение: попробуйте случайно опустить символ «и» и посмотрите, что получится. ;)
источник
and
и&&
функционально идентичны» к ответу ... И если вы прочитаете мой ответ, вы увидите, что я говорю НЕ о разборчивости;)