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-prefixopt"s-char-sequenceopt"
|encoding-prefixoptRraw-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 ofnconst 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.