Namespaces
Variants

std:: cerr, std:: wcerr

From cppreference.net
< cpp ‎ | io
Definido en el encabezado <iostream>
extern std:: ostream cerr ;
(1)
extern std:: wostream wcerr ;
(2)

Los objetos globales std::cerr y std::wcerr controlan la salida a un búfer de flujo de tipo definido por la implementación (derivado de std::streambuf y std::wstreambuf , respectivamente), asociado con el flujo de error estándar de C stderr .

Se garantiza que estos objetos se inicialicen durante o antes de la primera vez que se construye un objeto de tipo std::ios_base::Init y están disponibles para su uso en los constructores y destructores de objetos estáticos con inicialización ordenada (siempre que se incluya <iostream> antes de que se defina el objeto).

A menos que se haya emitido std :: ios_base :: sync_with_stdio ( false ) , es seguro acceder concurrentemente a estos objetos desde múltiples hilos tanto para salida formateada como no formateada.

Una vez inicializado, ( std :: cerr . flags ( ) & unitbuf ) ! = 0 (lo mismo para std::wcerr ) significa que cualquier salida enviada a estos objetos de flujo se vacía inmediatamente al sistema operativo (a través del destructor de std::basic_ostream::sentry ).

Además, std :: cerr . tie ( ) devuelve & std:: cout (lo mismo para std::wcerr y std::wcout ), lo que significa que cualquier operación de salida en std::cerr primero ejecuta std:: cout . flush ( ) (a través del constructor de std::basic_ostream::sentry ).

Contenidos

Notas

La 'c' en el nombre se refiere a "carácter" ( stroustrup.com FAQ ); cerr significa "flujo de error de caracteres" y wcerr significa "flujo de error de caracteres anchos".

Ejemplo

Salida a stderr mediante std::cerr vacía la salida pendiente en std::cout , mientras que la salida a stderr mediante std::clog no lo hace.

#include <chrono>
#include <iostream>
#include <thread>
using namespace std::chrono_literals;
void f()
{
    std::cout << "Output from thread...";
    std::this_thread::sleep_for(2s);
    std::cout << "...thread calls flush()" << std::endl;
}
int main()
{
    std::jthread t1{f};
    std::this_thread::sleep_for(1000ms);
    std::clog << "This output from main is not tie()'d to cout\n";
    std::cerr << "This output is tie()'d to cout\n";
}

Salida posible:

This output from main is not tie()'d to cout
Output from thread...This output is tie()'d to cout
...thread calls flush()

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Se aplica a Comportamiento publicado Comportamiento correcto
LWG 455 C++98 std :: cerr . tie ( ) y
std :: wcerr . tie ( ) devolvían punteros nulos
devuelven & std:: cout y
& std:: wcout respectivamente

Véase también

inicializa los objetos de flujo estándar
(clase miembro pública de std::ios_base )
escribe al flujo de error estándar de C stderr
(objeto global)
escribe al flujo de salida estándar de C stdout
(objeto global)
expresión de tipo FILE * asociada con el flujo de entrada
expresión de tipo FILE * asociada con el flujo de salida
expresión de tipo FILE * asociada con el flujo de salida de error
(constante macro)