c 流的注意事項

2021-07-14 14:05:12 字數 1152 閱讀 1919

1,輸入輸出緩衝區

每個輸出流都有乙個緩衝區,用來保護程式讀寫的資料,有了緩衝區,輸出的資料可能不會立即寫入到檔案中,作業系統可以將程式的多個輸出操作組合成單一的系統級寫操作。由於裝置的寫操作可能很耗時,所以允許作業系統將多個輸出操作組合為單一的裝置寫操作可以帶來很大的效能提公升。

導致輸出流(即,資料真正寫到輸出裝置或者檔案)的原因有很多:

---程式正常結束,作為main函式的return操作的一部分,緩衝重新整理會被執行。

---緩衝區滿時需要重新整理,而後的戲資料才能寫入緩衝區。

---我們可以使用操縱符endl來顯式重新整理緩衝區。

---在每個輸出操作之前,我們可以用操縱符unitbuf設定流的內部狀態,來清空緩衝區。預設情況下,對cerr是設定unitbuf的,因此寫到cerr的內容都是立即重新整理的。

---乙個輸出流可能被關聯到另乙個流,在這種情況下,但讀寫被關聯的流時,關聯到的流的緩衝區會被重新整理。例如,預設情況下,cin和cerr都關聯到cout。因此,都cin或寫cout都會導致cout的緩衝區被重新整理。

重新整理輸出緩衝區:

io庫中有除了endl還有一些操縱符是可以重新整理緩衝區的,但是最終的效果和endl還是有細微差別:

cout << "hi!" << endl; //輸出hi!和乙個換行,然後重新整理緩衝區

cout << "hi!" << flush; //輸出hi!,然後重新整理緩衝區,不附加任何額外字元

cout << "hi!" << ends; //輸出hi!和乙個空字元,然後重新整理緩衝區

但是經過下面的程式除錯發現,ends操縱符不會立即重新整理緩衝區,而endl和flush都會立即重新整理並輸出:

#include "sales_data.hpp"

using namespace std;

int main()

unitbuf操縱符:

如果想在每次輸出操作都重新整理緩衝區,我們可以使用unitbuf操縱符。它告訴流在接下來的每次寫操作之後都會進行一次flush操作。而nounitbuf操縱符則重置流,使其恢復使用正常的系統管理的緩衝區重新整理機制。

cout << unitbuf; 

cout << nounitbuf;

C 注意事項

include using namespace std class superclass virtual superclass virtual void dosomething const protected intitsage class subclass public superclass vo...

c 注意事項

const引用.const引用是指向const物件的引用 const int ival 1024 const int refval ival 正確,引用和引用的物件都是const int ref2 ival 這是錯誤的,因為引用不是const int i 42 const int r 42 這是正確...

C 基礎注意事項

1.傳指標時,我們可以通過指標來修改它在外部所指向的內容。但如果要修改外部指標所指向的物件是不可能的。例如傳遞外部指標到函式內來分配空間,必須傳遞指標的指標或指標的引用。2.char carry10 0 編譯器會將其後所有的東西都置0 3.函式返回值為const時,返回的東西付給乙個型別相同的標示後...