O que o 'L' na frente de uma string significa em C ++?

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

Embora pareça funcionar sem o L, qual é o objetivo do prefixo? A maneira como é usada nem faz sentido para um programador de hardcore em C.

Kang Min Yoo
fonte
4
Você não está usando C ++. É opcional em um programa C ++ / CLI se a literal da cadeia contiver apenas caracteres ASCII. O compilador o converte automaticamente em uma sequência codificada utf-16 que é internada de qualquer maneira.
Hans Passant
7
@ Hans: "Você não está usando C ++" Como você sabe?
Lightness Races in Orbit

Respostas:

138

É um wchar_tliteral, para conjunto de caracteres estendidos. A Wikipedia tem uma pequena discussão sobre esse tópico e exemplos de c ++.

Gleno
fonte
87

'L' significa wchar_tque, ao contrário de um caractere normal, requer 16 bits de armazenamento em vez de 8 bits. Aqui está um exemplo:

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

A wchar_té duas vezes maior que um caractere simples. No uso diário, você não precisa usar o wchar_t, mas se estiver usando o windows.h, precisará.

saidox
fonte
28
nota: não é necessariamente 16 bits. É específico do sistema operacional.
batman #
3
Eu acho que no linux wchar_t é de 32 bits
user10607
8
"No uso diário, você não precisa usar o wchar_t" é um julgamento arbitrário. Como um falante não nativo de inglês, posso dizer que devo usá-lo o tempo todo ...
Heyji 27/05/19
18

Isso significa que o texto é armazenado como wchar_tcaracteres, em vez de charcaracteres antigos simples .

(Eu originalmente disse que significava unicode. Eu estava errado sobre isso. Mas pode ser usado para unicode.)

karadoc
fonte
15

Isso significa que é um personagem amplo, wchar_t ,.

Semelhante a 1Lser um valor longo.

Bo Persson
fonte
14

Isso significa que é uma matriz de caracteres largos ( wchar_t) em vez de caracteres estreitos ( char).

É apenas uma sequência de caracteres diferentes, não necessariamente uma sequência Unicode .

R. Martinho Fernandes
fonte
11

L é um prefixo usado para strings amplas. Cada caractere usa vários bytes (dependendo do tamanho de wchar_t). A codificação usada é independente desse prefixo. Quero dizer, não deve ser necessariamente UTF-16, ao contrário do indicado em outras respostas aqui.

jdehaan
fonte