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.


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


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.


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


15

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

Semblable à 1Lune valeur longue.


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 .


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.