Когда в C ++ были введены альтернативные токены 'and' и 'or'?

Кажется, что достичь одинаковых результатов можно с помощью любой функции

blockquote>

. Это не всегда верно и зависит от поиска и замены данных, которые вы предоставляете. Например, где две функции различаются, см. . Есть ли в PHP str_replace предел более 13 символов?

  • strtr не заменит в некоторых частях строки, которые уже были заменены - str_replace заменит внутренние замены.
  • strtr начнется с самой длинной клавиши сначала, если вы вызовете ее с двумя параметры - str_replace будут заменяться слева направо.
  • str_replace может вернуть количество выполненных замен - strtr не предлагает такого значения счета.
37
задан TylerH 9 May 2016 в 16:55
поделиться

6 ответов

MSVC поддерживает их как ключевые слова, только если Вы используете /Za опция отключить расширения; это верно от, по крайней мере, VC7.1 (VS2003).

можно было поддерживать их как макросы включением iso646.h.

Мое предположение, они полагают, что, делая их ключевые слова по умолчанию взломали бы слишком много существующего кода (и я не буду удивлен, правы ли они).

Это было обсуждено в вопросе несколько пар недель назад где-нибудь здесь на Так, но я не могу заставить поиск SO или Google находить проклятую вещь.

23
ответ дан Michael Burr 9 May 2016 в 16:55
поделиться

См. стандарт C++. Проект № 2 комитета в свободном доступе в [1 113] ftp://ftp.research.att.com/dist/c++std/WP/CD2/body.pdf , хотя это является неавторитетным, устаревшим, и частично неправильным в нескольких местах. А именно, в разделе 2.5, Альтернативные Маркеры , определяется следующее:

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

, Хотя честно, я никогда не видел ни одного из них никогда используемый за исключением and, or, и not, и даже затем, это редко. Обратите внимание, что они не допустимы по умолчанию в простом коде C, только в C++. Если Вы захотите использовать их в C, то Вы будете иметь или к #define их сами как макросы, или к #include заголовок <iso646.h>, который определяет все вышеупомянутое за исключением <% >% <: :> %: %:%: как макросы (см. раздел 7.9 из стандарта C99).

4
ответ дан Adam Rosenfield 9 May 2016 в 16:55
поделиться

Компилятор GNU g ++ имеет их, но я не знаю о MS VC ++.

можно получить ту же функциональность путем помещения этого наверху файла кода.

#define and &&
#define bitor |
#define or ||
#define xor ^
#define compl ~
#define bitand &
#define and_eq &=
#define or_eq ^=
#define xor_eq ^=
#define not !
#define not_eq !=

, Хотя это - вид hackish, он должен работать.

0
ответ дан Joshua 9 May 2016 в 16:55
поделиться
  • 1
    Thanks— that' s охлаждаются, но для того, что мне нужно это для него won' t муха. Я просто обновил вопрос еще с некоторым контекстом. – ryanve 31 August 2011 в 17:22

От C++ 11 стандартов, 2.6/ Alternative tokens:

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

- Альтернативные маркеры

alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
   <%          {    |    and         &&   |    and_eq      &=
   %>          }    |    bitor       |    |    or_eq       |=
   <:          [    |    or          ||   |    xor_eq      ^=
   :>          ]    |    xor         ^    |    not         !
   %:          #    |    compl       ~    |    not_eq      !=
   %:%:        ##   |    bitand      &    |
32
ответ дан paxdiablo 9 May 2016 в 16:55
поделиться

Вы можете быть удивлены узнать об остальной части их:

and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq

Список от Ключевые слова .

C++

я полагаю, что последние версии GCC поддерживают эти ключевые слова.

0
ответ дан Greg Hewgill 9 May 2016 в 16:55
поделиться
  • 1
    There' s должен заменить закодированные символы назад - значение атрибута, когда доступы через js, уже нормализован назад к простому тексту – shesek 31 August 2011 в 16:30

Они находятся в рабочем документе для нового стандарта C++ на странице 14: Стандарт C++

0
ответ дан Rob Lachlan 9 May 2016 в 16:55
поделиться
  • 1
    I' m предпочтение этого ответа начиная с I' d скорее не загромождают глобальное пространство имен пакета с представленными пакетами. Премия вокруг: В ghci, как я динамично добавляю пакет? – Dominic Cooney 25 June 2010 в 12:24
Другие вопросы по тегам:

Похожие вопросы: