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