Кажется, что достичь одинаковых результатов можно с помощью любой функции
blockquote>. Это не всегда верно и зависит от поиска и замены данных, которые вы предоставляете. Например, где две функции различаются, см. . Есть ли в PHP str_replace предел более 13 символов?
strtr
не заменит в некоторых частях строки, которые уже были заменены -str_replace
заменит внутренние замены.strtr
начнется с самой длинной клавиши сначала, если вы вызовете ее с двумя параметры -str_replace
будут заменяться слева направо.str_replace
может вернуть количество выполненных замен -strtr
не предлагает такого значения счета.
MSVC поддерживает их как ключевые слова, только если Вы используете /Za
опция отключить расширения; это верно от, по крайней мере, VC7.1 (VS2003).
можно было поддерживать их как макросы включением iso646.h
.
Мое предположение, они полагают, что, делая их ключевые слова по умолчанию взломали бы слишком много существующего кода (и я не буду удивлен, правы ли они).
Это было обсуждено в вопросе несколько пар недель назад где-нибудь здесь на Так, но я не могу заставить поиск SO или Google находить проклятую вещь.
См. стандарт 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).
Компилятор 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, он должен работать.
От C++ 11 стандартов, 2.6/ Alternative tokens
:
- Альтернативные маркеры
alternative primary | alternative primary | alternative primary
--------------------+---------------------+--------------------
<% { | and && | and_eq &=
%> } | bitor | | or_eq |=
<: [ | or || | xor_eq ^=
:> ] | xor ^ | not !
%: # | compl ~ | not_eq !=
%:%: ## | bitand & |
Вы можете быть удивлены узнать об остальной части их:
and and_eq bitand bitor compl not not_eq or or_eq xor xor_eq
Список от Ключевые слова .
C++я полагаю, что последние версии GCC поддерживают эти ключевые слова.
Они находятся в рабочем документе для нового стандарта C++ на странице 14: Стандарт C++