4.8

yblll發表於2024-06-18

ios::sync_with_stdio(false);

在閱讀學習別人的程式碼的過程中,我們有時會發現這麼一行:

std::ios::sync_with_stdio(false);

這是由於cin比scanf要慢很多,在需要大量讀入時,用此行程式碼可以使cin更快。

為什麼cin比scanf更慢呢?

標準 C++ 流與標準 C 流在每次輸入/輸出操作後同步,同步的 C++ 流為無緩衝,而每次 C++ 流上的 I/O 都立即應用到對應 C 流的緩衝區。這使得能自由地混合 C++ 與 C I/O 。

另外,同步的 C++ 流保證為執行緒安全(從多個執行緒輸出的單獨字元可能交錯,但無資料競爭)。

若關閉同步,則允許 C++ 標準流獨立地緩衝其 I/O ,可認為這在某些情況下更快。

所有八個標準 C++ 流預設與其相應的 C 流同步。

若在標準流上已出現 I/O 後呼叫此函式,則行為是實現定義的:有的實現無效果,有的實現銷燬讀取緩衝區。

標準 C++ 流為下列者: std::cin 、 std::cout 、 std::cerr 、 std::clog 、 std::wcin 、 std::wcout 、 std::wcerr 和 std::wclog 。

標準 C 流為下列者: stdin 、 stdout 和 stderr 。

相關文章