C++ (and C) source code may be written in any non-ASCII 7-bit character set that includes the ISO 646:1983 invariant character set. However, several C++ operators and punctuators require characters that are outside of the ISO 646 codeset: {, }, [, ], #, \, ^, |, ~. To be able to use character encodings where some or all of these symbols do not exist (such as the German DIN 66003), C++ defines two kinds of alternatives: additional keywords that correspond to the operators that use these characters and special combinations of two or three ISO 646 compatible characters that are interpreted as if they were a single non-ISO 646 character.
Alternative tokens
There are alternative spellings for several operators defined as tokens with special meaning in the C++ standard.
| Primary | Alternative |
|---|---|
&& | and |
&= | and_eq |
& | bitand |
| | bitor |
~ | compl |
! | not |
!= | not_eq |
| || | or |
|= | or_eq |
^ | xor |
^= | xor_eq |
Compatibility with C
The same words are defined in the C programming language in the include file <iso646.h> as macros. Because in C++ these are built into the language, the C++ version of <iso646.h>, as well as <ciso646>, does not define anything.
Digraphs and trigraphs
The following combinations of two and three characters (digraphs and trigraphs) are valid substitutions for their respective primary characters:
| Primary | Digraph | Trigraph(until C++17) |
|---|---|---|
{ | <% | ??< |
| } | %> | ??> |
[ | <: | ??( |
] | :> | ??) |
# | %: | ??= |
\ | ??/ | |
^ | ??' | |
| | ??! | |
~ | ??- |
| Note that trigraphs (but not digraphs) are parsed before comments and string literals are recognized, so a comment such as | (until C++17) |
| When the parser meets the charater sequence | (since C++11) |
Keywords
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq.
Example
The following example demonstrates the use of several alternative tokens.
%:include <iostream>
int main(int argc, char *argv<::>)
<%
if (argc > 1 and argv<:1:> not_eq NULL) <%
std::cout << "Hello, " << argv<:1:> << '\n';
%>
%>See also
C documentation for Alternative operator representations |
Please login to continue.