Предупреждение C6392
Это выражение записывает значение указателя на поток. Если это намеренно, добавьте явный приведение к "void *"
Это правило было добавлено в Visual Studio 2022 17.8.
Замечания
C++ поддерживает широкие потоки символов, такие как std::wostringstream
, и нешировые потоки символов, std::ostringstream
например. Попытка распечатать широкую строку в неширинном потоке вызывает перегрузку void*
operator<<
. Эта перегрузка выводит адрес широкой строки вместо значения.
Имя анализа кода: 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.
}