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