What does L do?

What does L do?

本文关键字:do does What      更新时间:2023-10-16

这有什么作用?

const wchar_t *s = L"test";

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

L表示字符串是wchar_t字符的字符串,而不是char字符的正常字符串。我不确定你从哪里得到的关于四个字节的信息。

来自规范章节6.4.5字符串文字,第2段:

字符串文字是一个由零个或多个多字节字符组成的序列,用双引号括起来,如"xyz"中所示。宽字符串文字是相同的,只是前缀为字母L

第5段摘录:

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

如果有疑问,请参阅标准(§6.4.5,字符串文字(:

字符串文字是零个或多个多字节的序列用双引号括起来的字符,如在CCD_ 9中。宽字符串文字是相同,但前缀为字母L

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

L在前缀字符串时并不表示long integer。这意味着字符串中的每个字符都是一个宽字符。

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

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

如果您不知道L的作用,那么为什么要对每个数组元素都是long("大小为四个字节"(做出断言?long的想法是从哪里来的?

Llong的关系就像它和"小妖精"的关系一样——根本没有关系。L前缀表示以下字符串文字由宽字符组成,即每个字符都有wchar_t类型。

附言:最后,在指向字符串文字时,最好使用const限定指针:const wchar_t *s = L"test";