tia que literal c++ string widestring

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 R raw-string
encoding-prefix :
| u8
| u
| U
| L

y marca un ancho literal de cadena:

11) Un literal de cadena que comienza con L , como L"asdf" , es un literal de cadena ancha. Un literal de cadena ancha tiene el tipo "array of n 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.