警告 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.
}