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 流为下列者: 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 <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 输出流 stdout (全局对象) | |
写入到标准 C 错误流 stderr, 无缓冲 (全局对象) | |
写入到标准 C 错误流 stderr (全局对象) |