次の方法で共有


警告 C6392

この式では、ポインターの値がストリームに書き込まれます。 これが意図的な場合は、明示的なキャストを 'void *' に追加します

この規則は、Visual Studio 2022 17.8 で追加されました。

解説

C++ では、std::wostringstream などのワイド文字ストリームと、std::ostringstream などの非ワイド文字ストリームがサポートされます。 ワイド文字列を非ワイド ストリームに出力しようとすると、operator<<void* オーバーロードが呼び出されます。 このオーバーロードでは、値の代わりにワイド文字列のアドレスが出力されます。

コード分析名: STREAM_OUTPUT_VOID_PTR

次のコード スニペットでは、文字列 "Pear" ではなく、標準出力へのポインターの値が出力されます。

#include <iostream>

int main() {
    std::cout << L"Pear\n"; // Warning: C6392
}

このエラーを修正するための複数の方法があります。 ポインター値の出力が意図しない場合は、非ワイド文字列を使用します。

#include <iostream>

int main() {
    std::cout << "Pear\n"; // No warning.
}

または、ワイド ストリームを使用します。

#include <iostream>

int main() {
    std::wcout << L"Pear\n"; // No warning.
}

動作が意図的な場合は、明示的なキャストを使用して意図を明示的にし、警告を無音にします。

#include <iostream>

int main() {
    std::cout << static_cast<void*>(L"Pear\n"); // No warning.
}