Escape sequences
Las secuencias de escape se utilizan para representar ciertos caracteres especiales dentro de string literals y character literals .
Las siguientes secuencias de escape están disponibles:
|
Secuencia de
escape |
Descripción | Representación |
|---|---|---|
| Secuencias de escape simples | ||
\'
|
comilla simple |
byte
0x27
en codificación ASCII
|
\"
|
comilla doble |
byte
0x22
en codificación ASCII
|
\?
|
signo de interrogación |
byte
0x3f
en codificación ASCII
|
\\
|
barra invertida |
byte
0x5c
en codificación ASCII
|
\a
|
campana audible |
byte
0x07
en codificación ASCII
|
\b
|
retroceso |
byte
0x08
en codificación ASCII
|
\f
|
alimentación de formulario - nueva página |
byte
0x0c
en codificación ASCII
|
\n
|
alimentación de línea - nueva línea |
byte
0x0a
en codificación ASCII
|
\r
|
retorno de carro |
byte
0x0d
en codificación ASCII
|
\t
|
tabulación horizontal |
byte
0x09
en codificación ASCII
|
\v
|
tabulación vertical |
byte
0x0b
en codificación ASCII
|
| Secuencias de escape numéricas | ||
\
nnn
|
valor octal arbitrario |
unidad de código
nnn
(1~3 dígitos octales)
|
\o{
n...
}
(desde C++23)
|
unidad de código
n...
(número arbitrario de dígitos octales)
|
|
\x
n...
|
valor hexadecimal arbitrario |
unidad de código
n...
(número arbitrario de dígitos hexadecimales)
|
\x{
n...
}
(desde C++23)
|
||
| Secuencias de escape condicionales [1] | ||
\
c
|
Definido por la implementación | Definido por la implementación |
| Nombres de caracteres universales | ||
\u
nnnn
|
valor
Unicode
arbitrario;
puede resultar en varias unidades de código |
punto de código
U+
nnnn
(4 dígitos hexadecimales)
|
\u{
n...
}
(desde C++23)
|
punto de código
U+
n...
(número arbitrario de dígitos hexadecimales)
|
|
\U
nnnnnnnn
|
punto de código
U+
nnnnnnnn
(8 dígitos hexadecimales)
|
|
\N{
NAME
}
(desde C++23)
|
carácter Unicode arbitrario |
carácter nombrado por
NAME
(ver
abajo
)
|
-
↑
Las secuencias de escape condicionales son soportadas condicionalmente. El carácter
cen cada secuencia de escape condicional es un miembro del basic source character set (until C++23) basic character set (since C++23) que no es el carácter que sigue a la\en cualquier otra secuencia de escape.
Contenidos |
Rango de nombres de caracteres universales
|
Si un nombre de carácter universal corresponde a un punto de código que no es 0x24 (
|
(hasta C++11) |
|
Si un nombre de carácter universal correspondiente a un punto de código de un miembro del conjunto básico de caracteres fuente o caracteres de control aparece fuera de un literal de carácter o literal de cadena , el programa está mal formado. Si un nombre de carácter universal corresponde a un punto de código sustituto (el rango 0xD800-0xDFFF, inclusive), el programa está mal formado. Si un nombre de carácter universal utilizado en un literal de cadena UTF-16/32 no corresponde a un punto de código en ISO/IEC 10646 (el rango 0x0-0x10FFFF, inclusive), el programa está mal formado. |
(desde C++11)
(hasta C++20) |
|
Si un nombre de carácter universal correspondiente a un punto de código de un miembro del conjunto básico de caracteres fuente o caracteres de control aparece fuera de un literal de carácter o literal de cadena , el programa está mal formado. Si un nombre de carácter universal no corresponde a un punto de código en ISO/IEC 10646 (el rango 0x0-0x10FFFF, inclusive) o corresponde a un punto de código sustituto (el rango 0xD800-0xDFFF, inclusive), el programa está mal formado. |
(desde C++20)
(hasta C++23) |
|
Si un nombre de carácter universal correspondiente a un valor escalar de un carácter en el conjunto básico de caracteres o un carácter de control aparece fuera de un literal de carácter o literal de cadena , el programa está mal formado. Si un nombre de carácter universal no corresponde a un valor escalar de un carácter en el conjunto de caracteres de traducción , el programa está mal formado. |
(desde C++23) |
Secuencias de escape de caracteres universales con nombre
Un nombre de carácter universal de la sintaxis anterior es un carácter universal con nombre . Designa el carácter correspondiente en el Estándar Unicode ( capítulo 4.8 Nombre ) si la n-char-sequence es igual a su nombre de carácter o a uno de sus alias de nombre de carácter de tipo "control", "corrección" o "alternativo"; de lo contrario, el programa está mal formado. Estos alias se enumeran en la Base de Datos de Caracteres Unicode , en el archivo NameAliases.txt . Ninguno de estos nombres o alias tiene espacios iniciales o finales. Una n-char-sequence válida debe contener únicamente letras latinas mayúsculas de la A a la Z, dígitos, espacios y guiones. Otros caracteres nunca aparecen en un nombre de carácter Unicode, y por lo tanto su aparición en una n-char-sequence siempre hace que el programa esté mal formado. |
(desde C++23) | |||||||||||||||||||||||||||||
Notas
\ 0 es la secuencia de escape octal más comúnmente utilizada, porque representa el carácter nulo de terminación en cadenas terminadas en nulo .
El carácter de nueva línea \n tiene un significado especial cuando se utiliza en E/S en modo texto : se convierte a la representación de nueva línea específica del SO, generalmente un byte o secuencia de bytes. Algunos sistemas marcan sus líneas con campos de longitud en su lugar.
Las secuencias de escape octales tienen un límite de tres dígitos octales, pero terminan en el primer carácter que no sea un dígito octal válido si se encuentra antes.
Las secuencias de escape hexadecimales no tienen límite de longitud y terminan en el primer carácter que no sea un dígito hexadecimal válido. Si el valor representado por una única secuencia de escape hexadecimal no cabe en el rango de valores representado por el tipo de carácter utilizado en este literal de cadena ( char , char8_t , (since C++20) char16_t , char32_t , (since C++11) o wchar_t ), el resultado no está especificado.
|
Un nombre de carácter universal en un literal de cadena estrecha o un literal de cadena de 16 bits puede mapearse a más de una unidad de código, por ejemplo \U0001f34c son 4 unidades de código de char en UTF-8 ( \xF0\x9F\x8D\x8C ) y 2 unidades de código de char16_t en UTF-16 ( \xD83C\xDF4C ). |
(desde C++11) |
La secuencia de escape del signo de interrogación \ ? se utiliza para evitar que los trigraphs sean interpretados dentro de literales de cadena: una cadena como "??/" se compila como " \" , pero si el segundo signo de interrogación se escapa, como en "? \? /" , se convierte en "??/" . Dado que los trigraphs han sido eliminados de C++, la secuencia de escape del signo de interrogación ya no es necesaria. Se conserva para compatibilidad con C++14 (y revisiones anteriores) y C. (since C++17)
| Macro de prueba de características | Valor | Std | Característica |
|---|---|---|---|
__cpp_named_character_escapes
|
202207L
|
(C++23) | Secuencias de escape de caracteres universales con nombre |
Ejemplo
Salida:
This is a test She said, "Sells she seashells on the seashore?"
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| CWG 505 | C++98 |
el comportamiento era indefinido si el carácter siguiente
a una barra invertida no era uno de los especificados en la tabla |
hecho condicionalmente soportado
(la semántica está definida por la implementación) |
Véase también
|
Documentación de C
para
Secuencia de escape
|