L做什么?

she*_*baw 10 c c++ string

这是做什么的?

const wchar_t *s = L"test";
Run Code Online (Sandbox Code Playgroud)

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

Car*_*rum 15

L意味着字符串是一串wchar_t字符,而不是正常的字符串char.我不知道你从哪里得到了大约四个字节.

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

字符串文字是包含在双引号零个或多个多字节字符序列,如在"xyz".一个宽字符串文字是一样的,除了用字母前缀L.

并摘录第5段:

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


Ste*_*non 5

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

字符串文字是包含在双引号零个或多个多字节字符序列,如在"xyz".一个宽字符串文字是一样的,除了用字母前缀L.

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


Jon*_*ood 5

L并不意味着long integer在为字符串添加前缀时.这意味着字符串中的每个字符都是宽字符.

如果没有这个前缀,你正在分配的字符串charwchar_t指针,这将是一个不匹配.