public static member function
<ios> <iostream>
std::ios_base::sync_with_stdio
bool sync_with_stdio (bool sync = true);
切换与 cstdio 流的同步 [static]
如果该函数在程序执行第一次输入或输出操作之前被调用,它将开启或关闭所有 iostream 标准流与其对应的标准 C 流的同步。
如果已发生输入或输出操作后调用此函数,其效果是实现定义的。
默认情况下,iostream 对象和 cstdio 流是同步的(如同调用此函数并传入 true
作为参数)。
流的对应关系如下:
如果流已同步,程序可以混合使用 iostream 操作和 stdio 操作,并且它们的可观察效果保证遵循程序所使用的相同顺序。
如果流已同步,程序可以混合使用 iostream 操作和 stdio 操作,并且它们的可观察效果保证遵循线程所使用的相同顺序。
并发访问已同步的流(即,此函数返回 true
的流)永远不会引入数据竞争:字符是单独读取/写入的,尽管在线程之间没有进一步的顺序保证。这可能导致线程之间的字符交错,除非程序强制对整个操作进行适当的同步。
在关闭 stdio 同步后,iostream 标准流对象可以独立于标准 C 流运行(尽管不要求如此),并且混合操作可能会导致意外的字符交错。
请注意,这是一个静态成员函数,使用任何流对象的此成员调用此函数都会开启或关闭所有标准 iostream 对象的同步。
参数
- sync
- 布尔参数,指示是开启还是关闭同步:值为
true
表示请求开启同步,而值为 false
表示请求关闭同步。
返回值
返回调用前的同步状态。
它在第一次调用时总是返回 true。
数据竞争
可能修改流对象。
并发访问同一个流对象可能导致数据争用。
异常安全
基本保证:如果抛出异常,流处于有效状态。