Was bedeutet das 'L' vor einem String in C ++?

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

Obwohl es ohne das zu funktionieren scheint L, was ist der Zweck des Präfixes? Die Art und Weise, wie es verwendet wird, macht für einen Hardcore-C-Programmierer nicht einmal Sinn.

Kang Min Yoo
quelle
4
Sie verwenden kein C ++. In einem C ++ / CLI-Programm ist es optional, wenn das Zeichenfolgenliteral nur ASCII-Zeichen enthält. Der Compiler konvertiert es automatisch in eine utf-16-codierte Zeichenfolge, die in beide Richtungen interniert ist.
Hans Passant
7
@Hans: "Sie verwenden kein C ++" Woher wissen Sie das?
Leichtigkeitsrennen im Orbit

Antworten:

138

Es ist ein wchar_tLiteral für erweiterte Zeichensätze. Wikipedia hat eine kleine Diskussion zu diesem Thema und C ++ - Beispiele.

Gleno
quelle
87

"L" bedeutet wchar_t, dass im Gegensatz zu einem normalen Zeichen 16 Bit Speicher anstelle von 8 Bit erforderlich sind. Hier ist ein Beispiel:

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

A wchar_tist doppelt so groß wie ein einfacher Saibling. Im täglichen Gebrauch müssen Sie wchar_t nicht verwenden, aber wenn Sie windows.h verwenden, werden Sie es benötigen.

sagteox
quelle
28
Hinweis: Es ist nicht unbedingt 16 Bit. Es ist betriebssystemspezifisch.
Batman
3
Ich denke, dass unter Linux wchar_t 32 Bit ist
user10607
8
"Im täglichen Gebrauch müssen Sie wchar_t nicht verwenden" ist eine willkürliche Konjugation. Als nicht englischer Muttersprachler kann ich sagen, dass ich es die ganze Zeit benutzen muss ...
Heyji
18

Dies bedeutet, dass der Text als wchar_tZeichen und nicht als einfache alte charZeichen gespeichert wird .

(Ich habe ursprünglich gesagt, dass es Unicode bedeutet. Ich habe mich geirrt. Aber es kann für Unicode verwendet werden.)

Karadoc
quelle
15

Es bedeutet, dass es ein breiter Charakter ist wchar_t.

Ähnlich wie 1Lein langer Wert.

Bo Persson
quelle
14

Dies bedeutet, dass es sich um ein Array von breiten Zeichen ( wchar_t) anstelle von schmalen Zeichen ( char) handelt.

Es ist nur eine Zeichenfolge einer anderen Art von Zeichen, nicht unbedingt eine Unicode-Zeichenfolge .

R. Martinho Fernandes
quelle
11

L ist ein Präfix für breite Zeichenfolgen. Jedes Zeichen verwendet mehrere Bytes (abhängig von der Größe von wchar_t). Die verwendete Codierung ist unabhängig von diesem Präfix. Ich meine, es muss nicht unbedingt UTF-16 sein, anders als in anderen Antworten hier angegeben.

jdehaan
quelle