以前从未见过这种语法,有人可以解释.....返回L""

时间:2017-01-17 16:45:41

标签: c++ qt wchar-t lpwstr

很难尝试在线找到以下语法的解释并搜索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重建了所有这些代码,所以有一些变化。同样,我不确定这与我上面的两个问题有什么关系,但我想描绘出正在发生的事情。

1 个答案:

答案 0 :(得分:2)

" L" (或者' l',尽管大多数建议不要使用它,因为它看起来像1)在字符串文字(或字符文字)之前使它成为"宽&#34 ;文字,因此它包含wchar_t而不是char,其地址为wchar_t *而不是char *

C和C ++标准并未准确指定宽字符。在Windows上,它们通常是16位,表示UTF-16中的字符串。在大多数类Unix系统中,它们通常是32位,代表UCS-4中的字符串。

在这种特殊情况下,""之后的L表示它只是返回一个空字符串。