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.