¿Qué significa la 'L' delante de una cadena en C ++?


174
this->textBox1->Name = L"textBox1";

Aunque parece funcionar sin el L, ¿cuál es el propósito del prefijo? La forma en que se usa ni siquiera tiene sentido para un programador de C incondicional.


44
No estás usando C ++. Es opcional en un programa C ++ / CLI si el literal de cadena solo contiene caracteres ASCII. El compilador lo convierte automáticamente en una cadena codificada utf-16 que está internada de cualquier manera.
Hans Passant

77
@Hans: "No estás usando C ++" ¿Cómo lo sabes?
ligereza corre en órbita el

Respuestas:


138

Es wchar_tliteral, para un conjunto de caracteres extendido. Wikipedia tiene una pequeña discusión sobre este tema y ejemplos de c ++.


87

'L' significa wchar_tque, a diferencia de un carácter normal, requiere 16 bits de almacenamiento en lugar de 8 bits. Aquí hay un ejemplo:

"A"    = 41
"ABC"  = 41 42 43
L"A"   = 00 41
L"ABC" = 00 41 00 42 00 43

A wchar_tes dos veces más grande que un simple personaje. En el uso diario, no necesita usar wchar_t, pero si usa windows.h, lo va a necesitar.


28
nota: no es necesariamente de 16 bits. Es específico del sistema operativo.
Batman

3
Creo que en linux wchar_t es de 32 bits
user10607

8
"En el uso diario no es necesario usar wchar_t" es un arbitraje arbitrario. Como hablante no nativo de inglés, puedo decir que debo usarlo todo el tiempo ...
Heyji

18

Significa que el texto se almacena como wchar_tcaracteres en lugar de charcaracteres antiguos simples .

(Originalmente dije que significaba unicode. Me equivoqué al respecto. Pero puede usarse para unicode).


15

Esto significa que se trata de un carácter ancho, wchar_t.

Similar a 1Lser un valor largo.


14

Significa que es una matriz de caracteres anchos ( wchar_t) en lugar de caracteres estrechos ( char).

Es solo una cadena de un tipo diferente de carácter, no necesariamente una cadena Unicode .


11

L es un prefijo utilizado para cadenas anchas. Cada carácter usa varios bytes (dependiendo del tamaño de wchar_t). La codificación utilizada es independiente de este prefijo. Quiero decir que no debe ser necesariamente UTF-16, a diferencia de lo que se indica en otras respuestas aquí.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.