Можно ли использовать «и», «или» и т. Д. Вместо «&&», «||»? - PullRequest
23 голосов
/ 23 ноября 2010

Я привык к ключевым словам and и or в C ++.Я всегда использовал их, и набирать их быстро и удобно для меня.Однажды я услышал, что эти псевдонимы нестандартны и могут работать не на всех компиляторах.Но я не уверен в этом, я действительно не знаю, правда ли это.
Давайте предположим, что я даю кому-то свой код, будут ли у него проблемы с его компиляцией?
Все ли в порядке, когда я использую and, or вместо &&, ||?Или эти ключевые слова действительно нестандартны?
PSI использует компилятор MinGW.

Ответы [ 8 ]

28 голосов
/ 23 ноября 2010

Они фактически являются стандартом в C ++, как определено в стандарте ISO 14882: 2003 C ++ 2.5 / 2 (и, действительно, как определено в стандарте 1998 года).Обратите внимание, что они встроены в сам язык и не требуют наличия какого-либо заголовочного файла.

Однако они используются очень редко , и я еще не виделпроизводственный код, который фактически использует альтернативные токены.Единственная причина, по которой альтернативные токены существуют в первую очередь, заключается в том, что эти символы на некоторых клавиатурах (особенно не QWERTY) были либо несуществующими, либо неуклюжими для ввода.Это по-прежнему в стандарте обратной совместимости.

Несмотря на то, что они являются стандартными, я настоятельно рекомендую не использовать их.Для ввода альтернативных токенов требуется больше символов, а раскладка клавиатуры QWERTY уже содержит все символы, необходимые для ввода кода C ++ без использования альтернативных токенов.Кроме того, они, скорее всего, сбивают с толку читателей вашего кода.

2.5 / 2 Альтернативные токены

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

Table 2 - alternative tokens
+--------------+-----------+
| Alternative  |  Primary  |
+--------------+-----------+
|    <%        |    {      |
|    %>        |    }      |
|    <:        |    [      |
|    :>        |    ]      |
|    %:        |    #      |
|    %:%:      |    ##     |
|    and       |    &&     |
|    bitor     |    |      |
|    or        |    ||     |
|    xor       |    ^      |
|    compl     |    ~      |
|    bitand    |    &      |
|    and_eq    |    &=     |
|    or_eq     |    |=     |
|    xor_eq    |    ^=     |
|    not       |    !      |
|    not_eq    |    !=     |
+--------------+-----------+
7 голосов
/ 23 ноября 2010

Эти ключевые слова являются стандартными и описаны в разделе 2.5 стандарта. Таблица 2 представляет собой таблицу этих «альтернативных токенов». Вы можете использовать их как хотите, даже если все будут ненавидеть вас, если вы это сделаете.

5 голосов
/ 23 ноября 2010

Они стандартны в новом стандарте c ++ 0x. Современные современные компиляторы должны их распознавать, хотя я не верю, что они обязаны. Я полагаю, все, что плывет на твоей лодке.

4 голосов
/ 23 ноября 2010

это стандартный C ++, но со старыми компиляторами и, возможно, также с MSVC 10.0 (я не проверял), вам, возможно, придется включить специальный заголовок [isosomethingsomething.h]

ура и hth.,

3 голосов
/ 26 октября 2011

Я всегда перепутал операторы ^ (xor) и ~ (два дополнения).С альтернативными токенами (которые, я считаю, должны быть первичными), нет никаких сомнений в том, что они делают, да, я согласен с прежними постерами, что текстовые из них гораздо более описательны.На орграфах можно забыть один из символов в ||, &&, который вызовет тонкие ошибки и странное поведение.С текстовыми операторами гораздо труднее совершить такую ​​ошибку.

Я считаю, что то, что я упомянул выше, является реальными аргументами для повышения безопасности и ясности кода.Большинство программистов на C ++ ДОЛЖНЫ, на мой взгляд, пытаться привыкнуть к текстовым операторам в пользу старых загадочных операторов.

Я удивлен, что о них так мало программистов знают.Эти операторы должны были быть приняты давно, как я вижу.

2 голосов
/ 23 ноября 2010

Ух ты, я годами использовал и просматривал множество примеров кода на C ++ ... и никогда до сих пор не знал об этом, поэтому я думаю, это означает, что большинство людей их не используют. Итак, для согласованности (если вы планируете работать в групповых проектах и ​​т. Д.), Вероятно, лучше всего привыкнуть использовать && и ||.

1 голос
/ 27 октября 2012

Очевидно, что в отношении обратной совместимости ключевые слова "и / или" не являются проблемой. Я бы поверил, что они являются более новым стандартом. Просто старые программисты не понимают, что некоторые noob, возможно, должны иметь возможность читать код и не хотят искать, что означает &&. Опять же, если какой-либо ИТ-отдел стоит своей соли, это заставит программистов соответствовать стандартам компании! Это мое убеждение, поэтому (и / или) это футуристический и реально возможный стандарт, идущий в будущее. && обратно совместимо не (каламбур) (и / или).

1 голос
/ 23 ноября 2010

Раздел 2.5 стандарта ИСО / МЭК 14882: 1998 (исходный стандарт C ++) гласит:

§2.5 Альтернативные токены [lex.digraph]

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

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

16) К ним относятся «орграфы» и дополнительные зарезервированные слова.Термин «орграф» (токен, состоящий из двух символов) не является полностью описательным, поскольку одним из альтернативных токенов предварительной обработки является%:%: и, конечно, несколько первичных токенов содержат два символа.Тем не менее, те альтернативные токены, которые не являются лексическими ключевыми словами, в разговорной речи называются «орграфами».

17) Таким образом, «строковые» значения (16.3.2) of [and <: willотличаться, сохраняя исходное написание, но в противном случае токены можно свободно поменять местами. </p>

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

Здесь не обсуждается «если вы включаете какой-то заголовок» (хотя в C вам нужно #include <iso646.h>).Любая реализация, которая не поддерживает ключевые слова или орграфы, не совместима с выпуском 1998 года, не говоря уже о более поздних выпусках, стандарта C ++.

...