Que signifie le «L» devant une chaîne en C ++?

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

Bien que cela semble fonctionner sans le L, quel est le but du préfixe? La façon dont il est utilisé n'a même pas de sens pour un programmeur C hardcore.

Kang Min Yoo
la source
4
Vous n'utilisez pas C ++. Il est facultatif dans un programme C ++ / CLI si le littéral de chaîne ne contient que des caractères ASCII. Le compilateur le convertit automatiquement en une chaîne encodée en utf-16 qui est internée dans les deux sens.
Hans Passant
7
@Hans: "Vous n'utilisez pas C ++" Comment le savez-vous?
Courses de légèreté en orbite le

Réponses:

138

C'est un wchar_tlittéral, pour un jeu de caractères étendu. Wikipedia a une petite discussion sur ce sujet et des exemples C ++.

Gleno
la source
87

«L» signifie wchar_t, qui, contrairement à un caractère normal, nécessite 16 bits de stockage au lieu de 8 bits. Voici un exemple:

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

A wchar_test deux fois plus grand qu'un simple caractère. Dans l'utilisation quotidienne, vous n'avez pas besoin d'utiliser wchar_t, mais si vous utilisez windows.h, vous en aurez besoin.

saidox
la source
28
note: ce n'est pas forcément 16 bits. C'est spécifique au système d'exploitation.
batman
3
Je pense que dans linux wchar_t est 32 bits
user10607
8
«Dans l'usage quotidien, vous n'avez pas besoin d'utiliser wchar_t» est un jugement arbitraire. En tant que non anglophone, je peux dire que je dois l'utiliser tout le temps ...
Heyji
18

Cela signifie que le texte est stocké sous forme de wchar_tcaractères plutôt que d'anciens charcaractères.

(J'ai dit à l'origine que cela signifiait unicode. Je me suis trompé à ce sujet. Mais il peut être utilisé pour unicode.)

Karadoc
la source
15

Cela signifie qu'il est un caractère large, wchar_t.

Semblable à 1Lune valeur longue.

Bo Persson
la source
14

Cela signifie que c'est un tableau de caractères larges ( wchar_t) au lieu de caractères étroits ( char).

C'est juste une chaîne d'un type de caractère différent, pas nécessairement une chaîne Unicode .

R. Martinho Fernandes
la source
11

L est un préfixe utilisé pour les chaînes larges. Chaque caractère utilise plusieurs octets (selon la taille de wchar_t). Le codage utilisé est indépendant de ce préfixe. Je veux dire qu'il ne doit pas nécessairement être UTF-16 contrairement à ce qui est indiqué dans d'autres réponses ici.

jdehaan
la source