Representaciones alternativas de operadores
En C++ (y C) el código fuente puede estar escrito en cualquier conjunto de carácteres no ASCII de 7 bits, que incluye el conjunto de caracteres invariante ISO 646/ECMA-6. Sin embargo, varios operadores de C++ y puntuaciones requieren caracteres que se encuentran fuera del juego de códigos ISO 646: {, }, [, ], #, \, ^, |, ~
. Para poder utilizar una codificación de caracteres donde algunos o todos estos tókenes no existen, C++ define las siguientes alternativas, compuestas de carácteres compatibles con ISO 646.
Contenido |
[editar] Tókenes alternativos
Hay ortografías alternativas para varios operadores y otros tókenes que usan caracteres que no son ISO646. En todos los aspectos del lenguaje, cada token alternativo se comporta exactamente igual que su token primario, excepto por su ortografía (el operador para convertir a una cadena puede hacer que la ortografía sea visible). Los tókenes primarios de dos letras a veces se llaman "dígrafos".
Primario | Alternativo |
---|---|
&&
|
and
|
&=
|
and_eq
|
&
|
bitand
|
|
|
bitor
|
~
|
compl
|
!
|
not
|
!=
|
not_eq
|
|| | or |
|=
|
or_eq
|
^
|
xor
|
^=
|
xor_eq
|
Cuando el analizador encuentra la secuencia de caracteres <:: y el carácter posterior no es ni : ni >, el < se trata como un token de preprocesamiento por sí mismo y no como el primer carácter del token alternativo <:. Por lo tanto, std::vector<::std::string> no se tratará erróneamente como std::vector[:std::string>. |
(desde C++11) |
[editar] Notas
Los caracteres & y !} son invariables bajo ISO-646, pero se proporcionan alternativas para los tókenes que usan estos caracteres de todos modos para acomodar conjuntos históricos aún más restrictivos .
No hay una ortografía alternativa (como eq) para el operador de igualdad == porque el carácter = estaba presente en todos los juegos de caracteres soportados.
[editar] Compatibilidad con C
Las mismas palabras se definen en el lenguaje de programación C, en el archivo de encabezado <iso646.h>, como macros. Debido a que en C++ están integrados en el lenguaje, la versión C++ de <iso646.h>, así como <ciso646>, no define nada.
[editar] Trígrafos (eliminado en C++17)
Los siguientes grupos de tres caracteres (trígrafos) se analizan antes de que se reconozcan los comentarios y los literales de cadena, y cada aparición de un trígrafo se reemplaza por el carácter primario correspondiente:
Primario | Trígrafo |
---|---|
{ |
??<
|
} |
??>
|
[ |
??(
|
] |
??)
|
# |
??=
|
\ |
??/
|
^ |
??'
|
| |
??!
|
~ |
??-
|
Debido a que los trígrafos se procesan temprano, un comentario como // Se ejecutará la siguiente línea?????/ efectivamente comentará la siguiente línea y un literal de cadena como "Ingrese la fecha ??/??/??" se analiza como "Ingrese la fecha \\??"
[editar] Palabras clave
and, and_eq, bitand, bitor, compl, not, not_eq, or, or_eq, xor, xor_eq
[editar] Ejemplo
El siguiente ejemplo demuestra el uso de varios tókenes alternativos.
%:include <iostream> struct X <% compl X() <%%> // destructor X() <%%> X(const X bitand) = delete; // constructor de copia bool operator not_eq(const X bitand other) <% return this not_eq bitand other; %> %>; int main(int argc, char* argv<::>) <% // lambda con captura por referencia: auto saludar = <:bitand:>(const char* nombre) <% std::cout << "Hola " << nombre << " de parte de " << argv<:0:> << '\n'; %>; if (argc > 1 and argv<:1:> not_eq nullptr) <% saludar(argv<:1:>); %> %>
[editar] Véase también
Documentación de C para Operadores alternativos y tókenes
|