Должен ли я использовать "&&" или "и"?

Я использую С++ 11, и оба они компилируются без предупреждения, ведь это лучший способ сделать это?

if(a && b)

или

if(a and b)

Ответы

Ответ 1

2.6 Альтернативные маркеры [lex.digraph]

1 Альтернативные представления токенов предоставляются для некоторые операторы и пунктуаторы .16

2 Во всех аспектах языка каждый альтернативный токен ведет себя то же самое, соответственно, в качестве основного токена, за исключением его правописания .17 Набор альтернативных токенов определен в таблице 2.

Нельзя вставить таблицу 2, но в ней явно указано Alternative: and, Primary && (то же самое для or и ||).

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

Изменить: вышеупомянутая таблица 2:

Table 2 — Alternative tokens
Alternative Primary
<%          {
%>          }
<:          [
:>          ]
%:          #
%:%:        ##
and         &&
bitor       |
or          ||
xor         ˆ
compl       ~
bitand      &
and_eq      &=
or_eq       |=
xor_eq      ˆ=
not         !
not_eq      !=

Изменить: возможно, стоит отметить, согласно Себастьян Редл, MS нарушает правила здесь.

Ответ 2

Я предпочитаю && вместо and.

  • && широко известен и принят хотя многие даже не знают, что and является допустимым С++.
  • Некоторые IDE не принимают and (и друзей) по умолчанию. Например MSVС++.
  • По крайней мере для меня приоритет оператора && и || укоренен в мою голову. В то время как and и or имеют те же приоритеты, что и && и ||, простой факт, что я гораздо менее привык к ним, затрудняет чтение условия.

С другой стороны, and является более подробным и может быть проще использовать для программистов, которые изучили программирование на языках, которые не используют &&. Но можно утверждать, что эти люди должны изучать С++, а не пытаться изменить его snytax.

Ответ 3

Я бы предпочел   если (a и b) , потому что всегда есть шанс случайно перепутать   если (a & b) с   если (a и b) , что вызывает у вас массу проблем.

Ответ 4

Как кто-то, кто программирует как на C, так и на С++, если у вас нет веских оснований использовать разные альтернативы на каждом языке, я предпочитаю сохранять его согласованным. Хотя and был частью стандарта C почти на два десятилетия, для него требуется заголовочный файл, а не встроенный в язык. Особенно, когда фрагмент кода может использоваться в нескольких проектах, хлопот просто не стоит.

Я никогда не видел ситуации, когда использование and over && было бы выгодным. Я не могу представить себе современную систему разработки без ключа &, хотя, возможно, если вы пытаетесь что-то сделать на необычной платформе (например, прямое программирование на сильно ограниченной мобильной/встроенной системе), это было бы полезно. Я также думаю, что это уменьшает читаемость моего кода для людей, которые очень привыкли видеть && как логический и оператор.