在同一個程式中混合寬輸出流與窄輸出流
在《C Cookbook》中,提到在不該執行相同的程序。這個評論源於這樣一個事實:C 和 C 標準規定流有一個方向,一旦為流設定了這個方向,就不應該混合與該方向不相容的操作。
這在實務上意味著什麼嗎?
當第一次呼叫 cout 或 wcout 時,stdout 的方向被設定。在 cout 的情況下,stdout 成為面向位元組的流,而在 wcout 的情況下,stdout 成為面向寬的流。根據 C 標準 [27.4.1] 和 C 標準 [7.19.2],一旦設定了流的方向,您就不應該呼叫與該流的方向不相容的函數。
規則的例外
但是,值得注意的是,並非所有編譯器都嚴格遵循此標準。例如,在 Visual C 10.0 中,未實作 fwide 函數(用於設定流的方向)。因此,在 Visual C 中,混合 cout 和 wcout 是允許的。
同樣,在GCC 的早期版本中,由於修復了一個bug,可以透過呼叫std 在同一個程式中呼叫cout 和wcout ::ios::sync_with_stdio(假);
但是,重要的是要記住這些都是規則的例外。一般來說,不建議在同一程式中混合寬輸出流和窄輸出流,因為這可能會導致意外行為或未定義的結果。
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3