[英]What does L do?
这是做什么的?
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,String Literals):
字符串文字是用双引号括起来的零个或多个多字节字符的序列,如
"xyz"
。 宽字符串文字是相同的,除了以字母L
为前缀。
请注意,它并不表示每个字符都是long
字符,尽管前缀与long
字面后缀相同。
L
在为字符串添加前缀时不表示long integer
。 这意味着字符串中的每个字符都是宽字符。
如果没有此前缀,则会将一个char
字符串分配给wchar_t
指针,这将是一个不匹配。
它表示一个宽字符串,类型为wchar_t
。
如果你不知道什么L
的话,那么你为什么要作出关于每个数组元素是一个自信的陈述long
(“大小四个字节”)? 这个想法long
来自哪里?
long
它必须“妖精”, L
就有很多关系 - 根本就没有关系。 L
前缀表示以下字符串文字由宽字符组成,即每个字符都具有wchar_t
类型。
PS最后,在指向字符串文字时使用const限定指针总是一个好主意: const wchar_t *s = L"test";
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.