Namespaces
Variants

std:: cout, std:: wcout

From cppreference.net
< cpp ‎ | io
定义于头文件 <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::ios_base::Init 的对象,否则无法保证在开始初始化此类变量之前 std::cout 已被初始化为可用状态。

示例

#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 * 类型表达式
(宏常量)