std::ios_base::sync_with_stdio
来自cppreference.com
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 流 f 同步的标准流 str ,下列每对函数调用的效果都相同:
实践中,这表示同步的 C++ 流为无缓冲,而每次 C++ 流上的输入/输出都立即应用到对应 C 流的缓冲区。这使得能自由混合 C++ 与 C 输入/输出。
另外,同步的 C++ 流保证是线程安全的(从多个线程输出的单独字符可能交错,但无数据竞争)。
如果关闭同步,那么允许 C++ 标准流独立地缓冲它的输入/输出,在某些情况下可能明显会更快。
所有八个标准 C++ 流默认与它们相应的 C 流同步。
如果在标准流上已出现输入/输出后调用此函数,那么行为由实现定义:有的实现没有效果,有的实现销毁读取缓冲区。
参数
sync | - | 新的同步设置 |
返回值
调用函数前的同步状态
示例
运行此代码
#include <iostream> #include <cstdio> 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 (全局对象) |