close
Espacios de nombres
Variantes

std::cerr, std::wcerr

De cppreference.com
< cpp | io
 
 
Biblioteca de E/S
Manipuladores de E/S
E/S estilo C
Búferes
(en desuso en C++98)
Flujos
Abstracciones
E/S de archivos
E/S de cadenas
E/S de arrays
(en desuso en C++98)
(en desuso en C++98)
(en desuso en C++98)
Salida sincronizada
Tipos
Interfaz de categoría de error
(C++11)
 
 
<tbody> </tbody>
Definido en el archivo de 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 datos de tipo definido por la implementación (derivados de std::streambuf y std::wstreambuf, respectivamente), asociado con el flujo de salida de error estándar de C: stderr.

Está garantizado que la construcción de estos objetos ocurra antes o durante el llamado al primer constructor de un objeto tipo std::ios_base::Init, y que esté disponible para su uso en los constructores y destructores de objetos estáticos con inicialización ordenada (siempre y cuando <iostream> sea incluido antes de que el objeto sea definido).

Es seguro acceder a estos objetos simultáneamente desde varios hilos, tanto para la salida con formato como para la salida sin formato, a menos que sync_with_stdio(false) haya sido emitido.

Una vez inicializado, el objeto std::cerr es activado ((std::cerr.flags() & unitbuf) != 0, y de igual manera para std::wcerr), lo que significa que cualquier flujo enviado a estos objetos es descargado inmediatamente al sistema operativo (a través del destructor std::basic_ostream::sentry).

Adicionalmente, std::cerr.tie() retorna &std::cout (de igual manera para std::wcerr con std::wcout), lo que significa que cualquier operación de salida en std::cerr primero ejecuta std::cout.flush() (a través del constructor std::basic_ostream::sentry). (desde C++11)

Notas

La 'c' en el nombre de los objetos se refiere a caracter ("character") (stroustrup.com FAQ); cerr significa flujo de error de caracter ("character error (stream)") y wcerr significa flujo de error de caracter amplio ("wide character error (stream)").

Ejemplo

El flujo de salida hacia stderr a través de std::cerr descarga los flujos pendientes en std::cout, mientras que el flujo de salida hacia stderr a través de std::clog no los descarga.

#include <thread>
#include <iostream>
#include <chrono>

void f()
{
    std::cout << "Salida desde el hilo...";
    std::this_thread::sleep_for(std::chrono::seconds(2));
    std::cout << "...el hilo llama a flush()\n";
}

int main()
{
    std::thread t1(f);
    std::this_thread::sleep_for(std::chrono::seconds(1));
    std::clog << "Esta salida desde main no está atada a cout\n";
    std::cerr << "Esta salida desde main sí está atada a cout\n";
    t1.join();
}

Salida:

Esta salida desde main no está atada a cout
Salida desde el hilo...Esta salida desde main sí está atada a cout
...el hilo llama a flush()

Ver también

Inicializa los objetos flujo estándar.
(clase miembro pública de std::ios_base) [editar]
Escribe al flujo de error estándar de C stderr.
(objeto global) [editar]
Escribe al flujo de salida estándar de C stdout.
(objeto global) [editar]