Alternative operator representations
Le code source C++ (et C) peut être écrit dans n'importe quel jeu de caractères 7 bits non-ASCII qui inclut le
jeu de caractères invariant ISO 646:1983
. Cependant, plusieurs opérateurs et ponctuateurs C++ nécessitent des caractères qui sont en dehors du jeu de codes ISO 646 :
{, }, [, ], #, \, ^, |, ~
. Pour pouvoir utiliser des encodages de caractères où certains ou tous ces symboles n'existent pas (comme l'allemand
DIN 66003
), C++ définit les alternatives suivantes composées de caractères compatibles ISO 646.
Table des matières |
Tokens alternatifs
Il existe des orthographes alternatives pour plusieurs opérateurs et autres jetons utilisant des caractères non-ISO646. Dans tous les aspects du langage, chaque jeton alternatif se comporte exactement comme son jeton principal, à l'exception de son orthographe (l' opérateur de stringification peut rendre l'orthographe visible). Les jetons alternatifs à deux lettres sont parfois appelés "digrammes". Bien qu'il soit composé de quatre lettres, % : % : est également considéré comme un digramme.
| Principal | Alternatif |
|---|---|
&&
|
and |
&=
|
and_eq |
&
|
bitand |
|
|
bitor |
~
|
compl |
!
|
not |
!=
|
not_eq |
||
|
or |
|=
|
or_eq |
^
|
xor |
^=
|
xor_eq |
{
|
<%
|
}
|
%>
|
[
|
<:
|
]
|
:>
|
#
|
%:
|
##
|
%:%:
|
Trigraphs (supprimés en C++17)
Les trois groupes de caractères suivants (trigraphes) sont analysés avant que les commentaires et les littéraux de chaîne ne soient reconnus , et chaque apparition d'un trigraphe est remplacée par le caractère principal correspondant :
| Principal | Trigraphe |
|---|---|
{
|
??<
|
}
|
??>
|
[
|
??(
|
]
|
??)
|
#
|
??=
|
\
|
??/
|
^
|
??'
|
|
|
??!
|
~
|
??-
|
Étant donné que les trigraphes sont traités tôt, un commentaire tel que // Will the next line be executed?????/ commentera effectivement la ligne suivante, et le littéral de chaîne tel que "Enter date ??/??/??" est analysé comme "Enter date \\ ??" .
Notes
Les caractères & et ! sont invariants sous ISO-646, mais des alternatives sont fournies pour les jetons qui utilisent ces caractères afin de s'adapter aux jeux de caractères historiques encore plus restrictifs.
Il n'existe pas d'orthographe alternative (telle que eq ) pour l'opérateur d'égalité == car le caractère = était présent dans tous les jeux de caractères pris en charge.
Compatibilité avec C
Les mêmes mots sont définis dans le langage de programmation C dans le fichier d'en-tête <iso646.h> comme des macros. Parce qu'en C++ ceux-ci sont intégrés au langage, la version C++ de <iso646.h> , ainsi que <ciso646> , ne définit rien. Les digrammes non alphabétiques (par exemple < % ), cependant, font partie du langage de base et peuvent être utilisés sans inclure aucun en-tête (sinon, ils seraient inutilisables sur tout jeu de caractères dépourvu de # ).
Mots-clés
and , and_eq , bitand , bitor , compl , not , not_eq , or , or_eq , xor , xor_eq
Exemple
L'exemple suivant démontre l'utilisation de plusieurs jetons alternatifs.
%:include <iostream> struct X <% compl X() <%%> // destructor X() <%%> X(const X bitand) = delete; // copy constructor // X(X and) = delete; // move constructor bool operator not_eq(const X bitand other) <% return this not_eq bitand other; %> %>; int main(int argc, char* argv<::>) <% // lambda with reference-capture: auto greet = <:bitand:>(const char* name) <% std::cout << "Hello " << name << " from " << argv<:0:> << '\n'; %>; if (argc > 1 and argv<:1:> not_eq nullptr) greet(argv<:1:>); else greet("Anon"); %>
Sortie possible :
Hello Anon from ./a.out
Références
- Norme C++23 (ISO/CEI 14882:2024) :
-
- 5.5 Jetons alternatifs [lex.digraph]
- Norme C++20 (ISO/CEI 14882:2020) :
-
- 5.5 Jetons alternatifs [lex.digraph]
- Norme C++17 (ISO/CEI 14882:2017) :
-
- 5.5 Jetons alternatifs [lex.digraph]
- Norme C++14 (ISO/CEI 14882:2014) :
-
- 2.4 Séquences de trigraphes [lex.trigraph]
-
- 2.6 Jetons alternatifs [lex.digraph]
- Norme C++11 (ISO/CEI 14882:2011) :
-
- 2.4 Séquences trigraphes [lex.trigraph]
-
- 2.6 Jetons alternatifs [lex.digraph]
- Norme C++03 (ISO/CEI 14882:2003) :
-
- 2.3 Séquences trigraphes [lex.trigraph]
-
- 2.5 Jetons alternatifs [lex.digraph]
- Norme C++98 (ISO/CEI 14882:1998) :
-
- 2.3 Séquences de trigraphes [lex.trigraph]
-
- 2.5 Jetons alternatifs [lex.digraph]
Voir aussi
|
Documentation C
pour
Opérateurs et jetons alternatifs
|