std::ios_base:: sync_with_stdio
|
static
bool
sync_with_stdio
(
bool
sync
=
true
)
;
|
||
设置是否在每次输入/输出操作后,将标准C++流与标准C流同步。
标准 C++ 流包含以下几种: std::cin 、 std::cout 、 std::cerr 、 std::clog 、 std::wcin 、 std::wcout 、 std::wcerr 以及 std::wclog 。
标准 C 流包含以下三种: stdin 、 stdout 和 stderr 。
对于与C流 f 同步的标准流 str ,以下函数对具有相同效果:
实际上,这意味着同步的C++流是无缓冲的,并且每个对C++流的I/O操作会立即应用到对应的C流缓冲区。这使得自由混合C++和C的I/O操作成为可能。
此外,同步的 C++ 流被保证是线程安全的(从多个线程输出的单个字符可能会交错,但不会发生数据竞争)。
如果同步被关闭,C++标准流被允许独立缓冲其I/O,这在某些情况下可能会显著加快速度。
默认情况下,所有八个标准 C++ 流都与其对应的 C 流保持同步。
若此函数在标准流已发生I/O操作后被调用,其行为由实现定义:不同实现的处理方式从无影响到销毁读取缓冲区不等。
目录 |
参数
| sync | - | 新的同步设置 |
返回值
函数调用前的同步状态。
示例
#include <cstdio> #include <iostream> int main() { std::ios::sync_with_stdio(false); std::cout << "a\n"; std::printf("b\n"); std::cout << "c\n"; }
可能的输出:
b a c
缺陷报告
以下行为变更缺陷报告被追溯应用于先前发布的C++标准。
| 缺陷报告 | 适用范围 | 发布时行为 | 正确行为 |
|---|---|---|---|
| LWG 49 | C++98 |
未规定 (1) 实际返回哪种状态及
(2) 标准C与C++流之间的“同步”含义 |
均已明确规定 |
参见
|
写入标准C输出流
stdout
(全局对象) |
|
|
写入标准C错误流
stderr
,无缓冲
(全局对象) |
|
|
写入标准C错误流
stderr
(全局对象) |