L做什么?

时间:2011-04-15 16:46:23

标签: c++ c string

这是做什么的?

const wchar_t *s = L"test";

如果wchar_t在我的机器上是两个字节,那么我们为什么要告诉编译器应该以每个元素长的方式处理字符串,即四个字节大小?

5 个答案:

答案 0 :(得分:15)

L表示字符串是wchar_t个字符的字符串,而不是char个字符的正常字符串。我不知道你从哪里得到了大约四个字节。

从规范部分 6.4.5字符串文字,第2段:

  

字符串文字是用双引号括起来的零个或多个多字节字符的序列,如 "xyz" 宽字符串文字是相同的,除了前缀为字母 L

摘自第5段:

  

对于字符串文字,数组元素的类型为 char ,并使用多字节字符序列的各个字节进行初始化;对于宽字符串文字,数组元素的类型为 wchar_t ,并使用与多字节字符对应的宽字符序列进行初始化   序列,由 mbstowcs 函数定义,具有实现定义的当前语言环境。

答案 1 :(得分:5)

如有疑问,请参阅标准(§6.4.5,String Literals):

  

字符串文字是一个   零或多个多字节的序列   用双引号括起来的字符,   与"xyz"中一样。 宽字符串文字是   同样的,除了前缀   信L

请注意,表示每个字符都是long,尽管前缀与long字面后缀相同。

答案 2 :(得分:5)

在为字符串添加前缀时,

L并不意味着long integer。这意味着字符串中的每个字符都是宽字符。

如果没有此前缀,您将char的字符串分配给wchar_t指针,这将是一个不匹配。

答案 3 :(得分:2)

它表示一串宽字符,类型为wchar_t

答案 4 :(得分:2)

如果您不知道L做了什么,那么为什么要对每个数组元素long(“四个字节大小”)进行断言? long的想法来自何处?

Llong的关系与“妖精”的关系一样多 - 根本没有关系。 L前缀表示以下字符串文字由宽字符组成,即每个字符都有wchar_t类型。

P.S。最后,在指向字符串文字时使用const限定指针总是一个好主意:const wchar_t *s = L"test";