Namespaces
Variants

std::ios_base:: sync_with_stdio

From cppreference.net
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 ,以下函数对具有相同效果:

1) std:: fputc ( f, c ) str. rdbuf ( ) - > sputc ( c )
2) std:: fgetc ( f ) str. rdbuf ( ) - > sbumpc ( )
3) std:: ungetc ( c, f ) str. rdbuf ( ) - > sputbackc ( c )

实际上,这意味着同步的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
(全局对象)