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.
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 |
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.
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 character sequence | (since C++11) |
and
, and_eq
, bitand
, bitor
, compl
, not
, not_eq
, or
, or_eq
, xor
, xor_eq
.
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'; %> %>
C documentation for Alternative operator representations |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/language/operator_alternative