很难尝试在线找到以下语法的解释并搜索L""在这些论坛中没有提供任何结果。我在Qt5中调试了一个太长而无法粘贴的应用程序。我试图解决最后一个错误,该错误指向包含 - >的代码行。返回L"&#34 ;; < - 。它是下面函数中的最后一行。我收到的编译错误是......
C2440:'返回':无法转换为' const wchar_t [1]'到' LPWSTR'
我的第一个问题是这是什么意思 - > L"" < - ?
最后,如何解决此编译错误?
LPWSTR ImageThread::getLastErrorString(DWORD lastError)
{
DWORD result = FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL,
lastError,
LANG_USER_DEFAULT,
errorString,
sizeof(errorString),
NULL);
if (result > 0)
{
return errorString;
}
else
{
return L"";
}
}
我的假设是因为wchar_t [1]是1个字节而LPWSTR是2个字节,它无法转换???我不确定这是否很重要,但我在Qt5的工具栏中说“#34;错误:无法解码" myfile.cpp"”使用" UTF-8"编码。编辑不可能"。它为我提供了选择编码的选项。我确定这是因为这段代码是用较旧版本的Qt编写的,现在因为我用Qt5重建了所有这些代码,所以有一些变化。同样,我不确定这与我上面的两个问题有什么关系,但我想描绘出正在发生的事情。
答案 0 :(得分:2)
" L" (或者' l',尽管大多数建议不要使用它,因为它看起来像1
)在字符串文字(或字符文字)之前使它成为"宽&#34 ;文字,因此它包含wchar_t
而不是char
,其地址为wchar_t *
而不是char *
。
C和C ++标准并未准确指定宽字符。在Windows上,它们通常是16位,表示UTF-16中的字符串。在大多数类Unix系统中,它们通常是32位,代表UCS-4中的字符串。
在这种特殊情况下,""
之后的L
表示它只是返回一个空字符串。