两者之间有什么不同吗?两者都与vs2013编译。
CStringW str1 =“以下内容:”; CString str2 = L“以下:”;
字符串来自afxstr:https://msdn.microsoft.com/en-us/library/ms174288.aspx
我知道没有L的变体是通过适当的强制转换运算符进行转换的,但是如果我在引号之间不使用任何unicode字符,那么使用不带L的表单会出现什么问题。这是一个很好的编程习惯,即使你不打算使用非unicode字符,还是使用L“”,还是有更多吗?
编辑:也许我意识到了答案。主要的问题是没有L,我遭受了调用不必要的运算符方法的性能损失?但两者都给出了相同的,正确的结果吗?
答案 0 :(得分:2)
使用L
宏创建一个宽字符串文字。没有L
它只是一个狭窄的字符串。还要检查项目设置。您是将其构建为Unicode项目吗?
而不是使用L
我建议使用_T()
宏,只有当您的项目构建为Unicode时才扩展到L
因此换句话说,如果您希望您的字符串始终为Unicode,请使用L
<强>更新强> 我会推荐
CString str1 = _T("the following");
如果希望将字符串扩展为宽字符串
,则将项目构建为Unicode答案 1 :(得分:1)
"the following:"
的类型为const char*
,而L"the following
的类型为const wchar_t*
。根据您对第二个文字的处理方式,您可能会隐式转换,调用某些函数的重载版本,导致模板专门用于wchar_t
而不是char
类型,或者您的代码无法编译(并不总是允许缩小和隐式演员表)。请注意,从wchar_t
到char
(隐式或显式)的转换被视为缩小,因为char
通常为1个字节,而wchar_t
的大小始终更大。据我记忆,这是特定于实现的,char
应该是signed
还是unsigned
;那么从wchar_t
到char
的转换并不总能产生预期的结果,即使对于后者的ascii子集 - 你必须检查这些事情的标准。然后,如果您使用L
类型的文字,您的程序也将需要更多内存。与C ++一样,您需要为使用的内容付费,因此如果不需要unicode字符,请不要使用wchar_t
。