std::ios_base::sync_with_stdio
来自 cppreference.cn
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++ 标准。
DR | 应用于 | 已发布行为 | 正确的行为 |
---|---|---|---|
LWG 49 | C++98 | 它未指定 (1) 实际返回的状态和 (2) 标准 C 和 C++ 流之间的“同步”是什么意思 |
两者都已指定 |
[编辑] 参见
写入标准 C 输出流 stdout (全局对象) | |
写入标准 C 错误流 stderr,无缓冲 (全局对象) | |
写入标准 C 错误流 stderr (全局对象) |