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 (全局对象) |