Поделиться через


Предупреждение 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.
}