¿Cuál es exactamente el prefijo L en C ++?

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 comstackdores 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 encoding :

    2.14.5 Literales de cadenas [lex.string]

    string-literal :
    | encoding-prefix opts-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.

    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