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
...
标准流str
,与C流同步f
,下列功能对具有相同的效果:
1%29std::fputc(f, c)和str.rdbuf()->sputc(c)
2%29std::fgetc(f)和str.rdbuf()->sbumpc()
3%29std::ungetc(c, f)和str.rdbuf()->sputbackc(c)
在实践中,这意味着同步C++流被取消缓冲,C++流上的每个I/O操作立即应用到相应的C流%27S缓冲区。这使得C++和C I/O可以自由混合。
此外,同步C++流可以保证线程安全%28,从多个线程输出的单个字符可能会交织,但不会发生%29的数据竞争。
如果关闭同步,则允许C++标准流独立地缓冲它们的I/O,在某些情况下这可能要快得多。
默认情况下,所有八种标准C++流都与各自的C流同步。
如果在标准流上发生I/O之后调用此函数,则该行为是实现定义的:实现范围从无效到破坏读取缓冲区。
参数
sync | - | the new synchronization setting |
---|
返回值
调用函数之前的同步状态。
例
二次
#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
二次
另见
coutwcout | writes to the standard C output stream stdout(global object) |
---|---|
cerrwcerr | writes to the standard C error stream stderr, unbuffered(global object) |
clogwclog | writes to the standard C error stream stderr(global object) |
© cppreference.com
在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。