1. ホーム
  2. c++

[解決済み] この構文は初めて見ました、誰か説明してください... return L"". [重複]する

2022-02-19 23:30:31

質問事項

以下の構文についてオンラインで説明を探すのは難しく、このフォーラムで L"" を検索しても何の結果も得られないのです。私はQt5でアプリケーションをデバッグしているのですが、ここに貼り付けるには長すぎました。この最後のエラーは --> return L""; <-- を含むコードの行を指していて、これを解決しようとしています。以下の関数の最後の行の1つです。私が受け取っているコンパイラーエラーは...です。

C2440: 'return': '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のツールバーに "Errorという別のエラーが表示されます。というエラーが表示されます。編集はできません"。エンコードを選択するオプションが表示されます。これは、このコードが古いバージョンのQtで書かれ、現在Qt5でこのコードすべてを再構築しているため、いくつかの変更があったことが原因だと思います。繰り返しますが、これが上記の2つの質問と関係あるかどうかは分かりませんが、何が起こっているのかの全体像を描きたいと思いました。

解決方法は?

L"(または'l'、ただしほとんどの場合、'l'の使用は推奨されません。 1 文字列リテラル(または文字リテラル)の前に置くと、それは "ワイド" リテラルになるので、そこに含まれるのは wchar_t ではなく char であり、そのアドレスは wchar_t * ではなく char * .

CとC++の標準では、ワイド文字が何であるかは正確には規定されていません。Windowsでは、通常16ビットで、UTF-16の文字列を表します。ほとんどのUnix系システムでは、通常32ビットで、UCS-4で文字列を表します。

この場合 "" の後に L は、単に空の文字列を返していることを意味します。