std::cout, std::wcout
| Definido en el archivo de encabezado <iostream>
|
||
extern std::ostream cout; |
(1) | |
extern std::wostream wcout; |
(2) | |
Los objetos globales std::cout y std::wcout controlan la salida a un búfer de flujo de datos de tipo definido por la implementación (derivado de std::streambuf), asociado con el flujo de salida estándar de C: stdout.
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).
A menos que std::ios_base::sync_with_stdio(false) se haya emitido, es seguro acceder a estos objetos simultáneamente desde varios hilos, tanto para la salida con formato como para la salida sin formato.
Según la especificación de std::cin, std::cin.tie() devuelve &std::cout. Esto significa que cualquier operación de entrada en std::cin ejecuta std::cout.flush() (a través del constructor de std::basic_istream::sentry). De manera similar, std::wcin.tie() devuelve &std::wcout.
Según la especificación de std::cerr, std::cerr.tie() devuelve &std::cout. Esto significa que cualquier operación de salida en std::cerr ejecuta std::cout.flush() (a través del constructor de std::basic_ostream::sentry). De manera similar, std::wcerr.tie() devuelve &std::wcout. (desde C++11)
Notas
La 'c' en el nombre se refiere a "carácter" (stroustrup.com FAQ); cout significa "salida de carácter" y wcout significa "salida de carácter ancho".
Debido a que la inicialización dinámica de las variables plantilladas no está ordenada, no se garantiza que std::cout se haya inicializado a un estado utilizable antes de que comience la inicialización de dichas variables, a menos que se haya construido un objeto de tipo std::ios_base::Init.
Ejemplo
#include <iostream>
struct Foo {
int n;
Foo() {
std::cout << "constructor de objeto estático\n";
}
~Foo() {
std::cout << "destructor de objeto estático\n";
}
};
Foo f; // objeto estático
int main()
{
std::cout << "main\n";
}
Salida:
constructor de objeto estático
main
destructor de objeto estático
Véase también
| Inicializa los objetos flujo estándar. (clase miembro pública de std::ios_base)
| |
| Escribe al flujo de error estándar de C stderr, sin búfer. (objeto global) | |
| Escribe al flujo de error estándar de C stderr. (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 error. (constante de macro) |