¿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.

Kang Min Yoo
fuente
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 ++.

Gleno
fuente
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.

saidox
fuente
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).

karadoc
fuente
15

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

Similar a 1Lser un valor largo.

Bo Persson
fuente
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 .

R. Martinho Fernandes
fuente
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í.

jdehaan
fuente