繁体   English   中英

L“ the following:”和“ the following:”之间有什么区别

[英]What is the difference between L“the following:” and “the following:”

两者之间有什么区别吗? 两者都与vs2013一起编译。

CStringW str1 =“以下内容:”; CString str2 = L“以下:”;

字符串来自afxstr: https ://msdn.microsoft.com/en-us/library/ms174288.aspx

我知道不带L的变体是通过适当的强制转换运算符进行强制转换的,但是如果我在引号之间不使用任何Unicode字符,则使用不带L的表单会引起什么问题。 即使您不打算使用非Unicode字符,这还是使用L“”的良好编程习惯吗?

编辑:也许我意识到了答案。 主要问题是没有L,调用不必要的运算符方法会导致性能下降吗? 但是,两者给出的结果都是正确的吗?

您使用L宏创建一个宽字符串文字。 如果没有L它只是一个狭窄的字符串。 还要检查您的项目设置。 您是否将其构建为Unicode项目? 我建议您不要使用L而是使用_T()宏,该宏仅在您的项目以Unicode构建时才扩展为L

看看这个页面

因此,换句话说,如果您希望您的字符串始终为Unicode,请使用L

更新:我建议

CString str1 = _T("the following");

如果您希望将字符串扩展为宽字符串,并以Unicode格式构建项目

"the following:"的类型为const char*L"the following 's的类型为const wchar_t* 。根据对第二个文字的处理方式,您可能会隐式强制转换,调用某些函数的重载版本,导致专门用于wchar_t而不是char类型的模板,或者代码无法编译(并不总是允许缩小和隐式强制转换)请注意,从wchar_tchar (隐式或显式)被认为是缩小的,因为通常char是1个字节,而wchar_t的大小总是更大。据我所知,是否应该对char进行signed还是不unsigned是特定于实现的;因此,从wchar_tchar甚至不会总是产生预期的结果对于后者的ascii子集-您必须检查这些事情的标准,然后,如果您选择L类型的文字,则程序也将需要更多的内存。与C ++一样,您需要为使用的内容付费,所以如果不是真的 ed unicode字符,请勿使用wchar_t

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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