public static member function
<ios> <iostream>
std::ios_base::sync_with_stdio
bool sync_with_stdio (bool sync = true);
切換與 cstdio 流的同步 [static]
如果該函式在程式執行第一次輸入或輸出操作之前被呼叫,它將開啟或關閉所有 iostream 標準流與其對應的標準 C 流的同步。
如果已發生輸入或輸出操作後呼叫此函式,其效果是實現定義的。
預設情況下,iostream 物件和 cstdio 流是同步的(如同呼叫此函式並傳入 true
作為引數)。
流的對應關係如下:
如果流已同步,程式可以混合使用 iostream 操作和 stdio 操作,並且它們的可觀察效果保證遵循程式所使用的相同順序。
如果流已同步,程式可以混合使用 iostream 操作和 stdio 操作,並且它們的可觀察效果保證遵循執行緒所使用的相同順序。
併發訪問已同步的流(即,此函式返回 true
的流)永遠不會引入資料競爭:字元是單獨讀取/寫入的,儘管線上程之間沒有進一步的順序保證。這可能導致執行緒之間的字元交錯,除非程式強制對整個操作進行適當的同步。
在關閉 stdio 同步後,iostream 標準流物件可以獨立於標準 C 流執行(儘管不要求如此),並且混合操作可能會導致意外的字元交錯。
請注意,這是一個靜態成員函式,使用任何流物件的此成員呼叫此函式都會開啟或關閉所有標準 iostream 物件的同步。
引數
- sync
- 布林引數,指示是開啟還是關閉同步:值為
true
表示請求開啟同步,而值為 false
表示請求關閉同步。
返回值
返回呼叫前的同步狀態。
它在第一次呼叫時總是返回 true。
資料競爭
可能修改流物件。
併發訪問同一個流物件可能導致資料爭用。
異常安全
基本保證:如果丟擲異常,流處於有效狀態。