文字列の前の「L」はC ++で何を意味しますか?


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

なしでも機能するようLですが、接頭辞の目的は何ですか?その使用方法は、筋金入りのCプログラマにとっても意味がありません。


4
C ++を使用していません。文字列リテラルにASCII文字のみが含まれる場合、C ++ / CLIプログラムではオプションです。コンパイラーは、それを自動的にutf-16エンコードされた文字列に変換し、どちらかの方法でインターンします。
ハンスパッサント2011年

7
@ハンス:「あなたはC ++を使っていません」どのようにしてあなたは知っていますか?
オービットの軽量レース、2017年

回答:



87

「L」はwchar_t、通常の文字とは対照的に、8ビットではなく16ビットのストレージが必要であることを意味します。次に例を示します。

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

A wchar_tは単純なcharの2倍の大きさです。日常的に使用する場合はwchar_tを使用する必要はありませんが、windows.hを使用している場合は必要になります。


28
注:必ずしも16ビットである必要はありません。OS固有です。
バットマン2014年

3
Linuxではwchar_tは32ビットだと思います
user10607

8
「日常的にwchar_tを使用する必要はありません」は任意の判断です。非英語のネイティブスピーカーとして、私は...私はそれをすべての時間を使用しなければならないと言うことができます
Heyjiを

18

これは、テキストがwchar_t通常の古いchar文字ではなく文字として保存されることを意味します。

(もともとそれはユニコードを意味すると言っていました。それは間違っていました。しかし、それはユニコードに使用することができます。)



14

これはwchar_t、ナロー文字(char)ではなくワイド文字()の配列であることを意味します。

これは異なる種類の文字の単なる文字列であり、Unicode文字列である必要はありません


11

Lはワイド文字列に使用される接頭辞です。各文字は数バイトを使用します(のサイズによって異なりますwchar_t)。使用されるエンコーディングは、このプレフィックスとは無関係です。ここで他の回答で述べられているように、必ずしもUTF-16である必要はありません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.