std::cout, std::wcout

来自cppreference.com
< cpp‎ | io
定义于头文件 <iostream>
extern std::ostream cout;
(1)
extern std::wostream wcout;
(2)

全局对象 std::coutstd::wcout 控制到实现定义类型流缓冲(导出自 std::streambuf )的输出,它与标准 C 输出流 stdout 关联。

保证这些对象在首次构造 std::ios_base::Init 类型对象期间或之前初始化,并可用于拥有有序初始化的静态对象的构造函数和析构函数(只要在定义对象前包含 <iostream> )。

除非发行 sync_with_stdio(false) ,否则从多个线程为有格式和无格式输出同时访问这些对象是安全的。

一旦初始化,则 std::couttie()std::cinstd::wcout 被 tie() 到 std::wcin ,这表示任何 std::cin 上的输入操作执行 std::cout.flush() (通过 std::basic_istream::sentry 构造函数)。

一旦初始化,则 std::cout 亦被 tie()std::cerrstd::wcout 被 tie() 到 std::wcerr ,这表示任何 std::cerr 上的输入操作执行 std::cout.flush() (通过 std::basic_istream::sentry 构造函数)。(C++11 起)

注意

名称中的 'c' 指代“字符”( stroustrup.com FAQ ); cout 表示“字符输出”而 wcout 表示“宽字符输出”。

示例

#include <iostream>
struct Foo {
    int n;
    Foo() {
       std::cout << "static constructor\n";
    }
    ~Foo() {
       std::cout << "static destructor\n";
    }
};
Foo f; // 静态对象
int main()
{
    std::cout << "main function\n";
}

输出:

static constructor
main function
static destructor

参阅

初始化标准流对象
(std::ios_base 的公开成员类)
写入到标准 C 错误流 stderr, 无缓冲
(全局对象)
写入到标准 C 错误流 stderr
(全局对象)