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::cin 的规定,std::cin.tie() 返回 &std::cout。这表示 std::cin 上的任何输入操作均执行 std::cout.flush()(通过 std::basic_istream::sentry 构造函数)。

根据 std::cerr 的规定,std::cerr.tie() 返回 &std::cout。这表示 std::cerr 上的任何输入操作均执行 std::cout.flush()(通过 std::basic_istream::sentry 构造函数)。(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; // 静态对象
 
int main()
{
    std::cout << "main function\n";
}

输出:

static constructor
main function
static destructor

参阅

初始化标准流对象
(std::ios_base 的公开成员类)
写入到标准 C 错误流 stderr,无缓冲
(全局对象)
写入到标准 C 错误流 stderr
(全局对象)
与输入流关联的 FILE* 类型表达式
与输出流关联的 FILE* 类型表达式
与错误输出流关联的 FILE* 类型表达式
(宏常量)