Что означает «L» перед строкой в ​​C ++?


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

Хотя кажется, что работает без L, какова цель префикса? То, как оно используется, даже не имеет смысла для хардкорного программиста на Си.


4
Вы не используете C ++. Это необязательно в программе на C ++ / CLI, если строковый литерал содержит только символы ASCII. Компилятор автоматически преобразует ее в строку в кодировке utf-16, которая интернируется в любом случае.
Ганс Пассант,

7
@ Ханс: «Вы не используете C ++» Как вы знаете?
Гонки

Ответы:


138

Это wchar_tбуквальный, для расширенного набора символов. В Википедии есть небольшая дискуссия на эту тему и примеры c ++.


87

«L» означает wchar_t, что, в отличие от обычного символа, требуется 16-битная память, а не 8-битная. Вот пример:

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

А wchar_tв два раза больше простого символа. При ежедневном использовании вам не нужно использовать wchar_t, но если вы используете windows.h, он вам понадобится.


28
примечание: это не обязательно 16 бит. Это зависит от ОС.
Бэтмен

3
Я думаю, что в Linux wchar_t составляет 32 бита
user10607

8
«В повседневном использовании вам не нужно использовать wchar_t» - произвольное обвинение. Как не носитель английского языка, я могу сказать, что я должен использовать это все время ...
Хейджи

18

Это означает, что текст хранится как wchar_tсимволы, а не как простые старые charсимволы.

(Первоначально я сказал, что это означает Unicode. Я был неправ в этом. Но это может быть использовано для Unicode.)



14

Это означает, что это массив широких символов ( wchar_t) вместо узких символов ( char).

Это просто строка символов другого типа, не обязательно строка Unicode .


11

L - префикс, используемый для широких строк. Каждый символ использует несколько байтов (в зависимости от размера wchar_t). Используемая кодировка не зависит от этого префикса. Я имею в виду, что это не обязательно должен быть UTF-16, в отличие от изложенных здесь в других ответах

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.