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.


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.


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.


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


15

Es bedeutet, dass es ein breiter Charakter ist wchar_t.

Ähnlich wie 1Lein langer Wert.


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 .


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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.