sync_with_stdio()
的一個特性
水一篇隨筆
其實對於用快讀的大佬來說沒什么用,但還是提一下
ios::sync_with_stdio(false)
用處是“關閉同步”,從而加快cin與cout的效率。
在部分機子上如果開了這個函數cin和cout跑的還比printf和scanf快。
但是用了sync_with_stdio(false)之后不能與printf和scanf同用,否則會出錯。
最近調試的時候發現的:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cout<<"1\n";
printf("2\n");
cout<<"3\n";
printf("4\n");
}
運行結果是:
2
4
1
3
可以發現開了ios::sync_with_stdio(false)
之后,printf函數被提前了,而且這與它在代碼中具體出現的位置無關。
至於為什么,據說是C++為了兼容C語言,保證程序在使用std::printf
和std::cout
的時候不發生混亂(不發生上述情況),將輸出流綁到了一起,也就是用了sync_with_stdio()
函數:
如果不綁到一起(也就是開個ios::sync_with_stdio(false)),會造成指針讀取的混亂,因此輸出順序混亂。
不過在測試的時候我並沒有發現cin與scanf的不兼容(出於安全,還是別一起用)。