Alternative operator representations
替代算子表示
C++%28和C%29源代码可以用任何非ASCII 7位字符集编写,其中包括ISO 646:1983不变字符集。然而,一些C++操作符和标点符号需要在ISO 646代码集之外的字符:{, }, [, ], #, \, ^, |, ~
.在某些或所有这些符号不存在%28的情况下,例如德语,则能够使用字符编码DIN 66003%29,C++定义了由646兼容字符组成的下列备选方案。
替代令牌
对于使用非ISO 646字符的几个操作符和其他标记,还有其他拼写方式。在语言的所有方面,每个可选令牌的行为与其主令牌完全相同,除了拼写%28串化算子可以使拼写%29可见。这种双字母替代标记有时被称为“有向图”。
Primary | Alternative |
---|---|
&& | and |
&= | and_eq |
& | bitand |
| | bitor |
~ | compl |
! | not |
!= | not_eq |
|| | or |
|= | or_eq |
^ | xor |
^= | xor_eq |
{ | <% |
} | %> |
[ | <: |
] | :> |
%: | |
%:%: |
When the parser encounters the character sequence <:: and the subsequent character is neither : nor >, the < is treated as a preprocessing token by itself and not as the first character of the alternative token <:. Thus std::vector<::std::string> won't be wrongly treated as std::vector[:std::string>. | (since C++11) |
---|
注记
人物&
和!
在Iso-646下是不变的,但是对于使用这些字符来容纳更多限制性历史字符集的令牌,提供了其他选项。
没有其他拼写%28,例如eq
%29表示相等运算符==
因为那个角色=
出现在所有支持的字符集中。
与C兼容
在包含文件中用C语言定义了相同的单词<iso646.h>作为宏。因为在C++中,这些都内置在语言中,C++版本的<iso646.h>,以及<ciso646>没有定义任何东西。
图%28直到C++17%29
以下三个字符组%28组(图%29)是在识别注释和字符串文本之前解析。,而每一个三角图的外观都被相应的主字符所取代:
Primary | Trigraph |
---|---|
{ | ??< |
} | ??> |
[ | ??( |
] | ??) |
??= | |
\ | ??/ |
^ | ??' |
| | ??! |
~ | ??- |
因为trigram被提前处理,所以注释(如// Will the next line be executed?????/
将有效地注释掉以下行,字符串文本(如"Enter date ??/??/??"
被解析为"Enter date \\??"
...
关键词
and
,,,and_eq
,,,bitand
,,,bitor
,,,compl
,,,not
,,,not_eq
,,,or
,,,or_eq
,,,xor
,,,xor_eq
...
例
下面的示例演示了几种替代令牌的使用。
二次
%:include <iostream>
int main(int argc, char *argv<::>)
<%
if (argc > 1 and argv<:1:> not_eq NULL) <%
std::cout << "Hello, " << argv<:1:> << '\n';
%>
%>
二次
另见
C替代操作符表示的文档
*。
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。