Co oznacza „L” na początku łańcucha w C ++?

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

Chociaż wydaje się, że działa bez znaku L, jaki jest cel przedrostka? Sposób, w jaki jest używany, nie ma sensu nawet dla zagorzałego programisty C.

Kang Min Yoo
źródło
4
Nie używasz C ++. W programie C ++ / CLI jest opcjonalne, jeśli literał ciągu zawiera tylko znaki ASCII. Kompilator automatycznie konwertuje go na ciąg zakodowany w utf-16, który jest internowany w obie strony.
Hans Passant,
7
@Hans: „Nie używasz C ++” Skąd wiesz?
Wyścigi lekkości na orbicie

Odpowiedzi:

138

To wchar_tdosłowne, dla rozszerzonego zestawu znaków. Wikipedia ma małą dyskusję na ten temat i przykłady w języku C ++.

Gleno
źródło
87

„L” oznacza wchar_t, który w przeciwieństwie do zwykłego znaku wymaga pamięci 16-bitowej zamiast 8-bitowej. Oto przykład:

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

A wchar_tjest dwa razy większe niż zwykły znak. W codziennym użytkowaniu nie musisz używać wchar_t, ale jeśli używasz windows.h, będziesz go potrzebować.

saidox
źródło
28
uwaga: niekoniecznie jest to 16-bitowe. Jest to specyficzne dla systemu operacyjnego.
batman
3
Myślę, że w linux wchar_t jest 32 bity
user10607
8
„W codziennym użytkowaniu nie trzeba używać wchar_t” to dowolne wyrażenie. Jako nie native speaker, mogę powiedzieć, że muszę go używać cały czas ...
Heyji,
18

Oznacza to, że tekst jest przechowywany jako wchar_tznaki, a nie zwykłe stare charznaki.

(Pierwotnie powiedziałem, że oznacza to Unicode. Myliłem się co do tego. Ale można go używać w przypadku Unicode).

karadoc
źródło
15

Oznacza to, że jest to szeroki charakter, wchar_t.

Podobny do 1Ldługiej wartości.

Bo Persson
źródło
14

Oznacza to, że jest to tablica szerokich znaków ( wchar_t) zamiast wąskich znaków ( char).

To po prostu ciąg znaków innego rodzaju, niekoniecznie ciąg znaków Unicode .

R. Martinho Fernandes
źródło
11

L to przedrostek używany do szerokich strun. Każdy znak zajmuje kilka bajtów (w zależności od rozmiaru wchar_t). Używane kodowanie jest niezależne od tego przedrostka. Mam na myśli to, że niekoniecznie musi to być UTF-16, inaczej niż podano w innych odpowiedziach tutaj.

jdehaan
źródło