std::cout, std::wcout
Определено в заголовке <iostream> | ||
|---|---|---|
extern std::ostream cout; | (1) | |
extern std::wostream wcout; | (2) |
Глобальные объекты std::cout и std::wcout управляют выводом в буфер потока заданного реализацией типа (производный от std::streambuf), связанный со стандартным C потоком вывода stdout.
Эти объекты гарантированно инициализируются до или во время первого создания объекта типа std::ios_base::Init и доступны для использования в конструкторах и деструкторах статических объектов с упорядоченной инициализацией (при условии, что <iostream> включён до определения объекта).
Если std::ios_base::sync_with_stdio(false) не был выпущен, безопасен одновременный доступ к этим объектам из нескольких потоков для форматированного и неформатированного вывода.
По спецификации std::cin, std::cin.tie() возвращает &std::cout. Это означает, что любая операция ввода на std::cin выполняет std::cout.flush() (через конструктор std::basic_istream::sentry). Аналогично, std::wcin.tie() возвращает &std::wcout.
По спецификации std::cerr, std::cerr.tie() возвращает &std::cout. Это означает, что любая операция вывода на std::cerr выполняет std::cout.flush() (через конструктор std::basic_ostream::sentry). Аналогично, std::wcerr.tie() возвращает &std::wcout. (с C++11)
Примечания
Буква 'c' в имени относится к "символу" (stroustrup.com FAQ); cout означает "вывод символов", а wcout означает "вывод широких символов".
Поскольку динамическая инициализация шаблонных переменных неупорядочена, не гарантируется, что std::cout инициализировано в работоспособное состояние до начала инициализации таких переменных, если не был создан объект типа std::ios_base::Init.
Пример
#include <iostream>
struct Foo
{
int n;
Foo()
{
std::cout << "static constructor\n";
}
~Foo()
{
std::cout << "static destructor\n";
}
};
Foo f; // static object
int main()
{
std::cout << "main function\n";
}Вывод:
static constructor main function static destructor
См. также
| инициализирует стандартные объекты потоков (публичный класс-член std::ios_base) |
|
записывает в стандартный C поток ошибок stderr, не буферизованно (глобальный объект) |
|
записывает в стандартный C поток ошибок stderr (глобальный объект) |
|
выражение типа FILE*, связанное с потоком ввода выражение типа FILE*, связанное с потоком вывода выражение типа FILE*, связанное с потоком вывода ошибок (макроконстанта) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/io/cout