在C ++中,字符串前面的'L'是什么意思?


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

尽管似乎没有 L,但前缀的目的是什么?它的使用方式甚至对铁杆C程序员都没有意义。


4
您没有使用C ++。如果字符串文字仅包含ASCII字符,则在C ++ / CLI程序中是可选的。编译器会自动将其转换为以两种方式插入的utf-16编码的字符串。
汉斯·帕桑

7
@Hans:“您没有使用C ++”,您怎么知道?
Lightness Races in Orbit

Answers:



87

wchar_t与普通字符相反,“ L”表示需要16位存储而不是8位存储。这是一个例子:

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

A的大小wchar_t是简单字符的两倍。在日常使用中,您不需要使用wchar_t,但是如果您使用的是windows.h,则将需要它。


28
注意:不一定是16位。它是特定于操作系统的。
蝙蝠侠2014年

3
我认为在Linux中,wchar_t为32位
user10607

8
“在日常使用中,您不需要使用wchar_t”是任意判断。作为非英语母语者,我可以说我必须一直使用它
Heyji

18

这意味着文本存储为wchar_t字符,而不是普通的旧char字符。

(我最初说的是unicode。这是我的错。但是它可以用于unicode。)


15

这意味着它是一个宽字符,wchar_t

类似于1L获得长期价值。


14

这意味着它是一个宽字符数组(wchar_t)而不是窄字符数组(char)。

它只是具有不同类型字符的字符串不一定是Unicode字符串


11

L是用于宽字符串的前缀。每个字符使用几个字节(取决于的大小wchar_t)。所使用的编码与此前缀无关。我的意思是,与此处其他答案所述不同,它不一定一定是UTF-16。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.