sync_with_stdio(false)的副作用


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::printfstd::cout的時候不發生混亂(不發生上述情況),將輸出流綁到了一起,也就是用了sync_with_stdio()函數:
它的函數原型
它的實現
如果不綁到一起(也就是開個ios::sync_with_stdio(false)),會造成指針讀取的混亂,因此輸出順序混亂。
不過在測試的時候我並沒有發現cin與scanf的不兼容(出於安全,還是別一起用)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM