que - ¿Cuál es exactamente el prefijo L en C++?
wstring tia portal (3)
El significado de L aquí es un caracter ancho: wchar_t
. String con L está codificado en 16 bits en lugar de 8 bits, tome un ejemplo:
"A" = 41
L"A" = 00 41
Entiendo lo que hace: especifica un literal de cadena como const wchar_t *
(cadena de caracteres anchos) en lugar de const char *
(caracteres antiguos simples), pero ¿cómo se define realmente?
¿Es una macro de algún tipo? ¿Es un operador para los compiladores GCC? ¿Qué es ?
Los prefijos literales son una parte del lenguaje central, al igual que los sufijos:
''a'' // type: char
L''a'' // type: wchar_t
"a" // type: char[2]
L"a" // type: wchar_t[2]
U"a" // type: char32_t[2]
1 // type: int
1U // type: unsigned int
0.5 // type: double
0.5f // type: float
0.5L // type: long double
Tenga en cuenta que wchar_t
no tiene nada que ver con Unicode. Aquí hay una gran queja mía sobre el tema.
Se llama un prefijo de codificación :
2.14.5 Literales de cadenas [lex.string]
string-literal
:
|encoding-prefix
opt
"s-char-sequenceopt
"
|encoding-prefix
opt
Rraw-string
encoding-prefix
:
|u8
|u
|U
|L
y marca un ancho literal de cadena:
11) Un literal de cadena que comienza con
L
, comoL"asdf"
, es un literal de cadena ancha. Un literal de cadena ancha tiene el tipo "array ofn
const wchar_t
", donde n es el tamaño de la cadena como se define a continuación; tiene una duración de almacenamiento estática y se inicializa con los caracteres especificados.