繁体   English   中英

L做什么?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM