std::cout, std::wcout
来自cppreference.com
在标头 <iostream> 定义
|
||
extern std::ostream cout; |
(1) | |
extern std::wostream wcout; |
(2) | |
全局对象 std::cout
和 std::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* 类型表达式 (宏常量) |