C++Primer_ch8

第8章 IO庫

8.1 IO 類
8.2 文件輸入輸出
8.3 string流


8.1 IO 類

在這裏插入圖片描述

  • 寬字符版本的類型和函數的名字以一個w開始
  • 標準庫使我們忽略這些不同類型的流之間的差異,這是通過繼承機制實現的。類型ifstreamistringstream都繼承自istream
  • 不能拷貝或對IO對象賦值,進行IO操作的函數通常以引用方式傳遞和返回流。讀寫一個IO對象會改變其狀態,因此傳遞和返回的引用不能是const
  • 條件狀態可以幫助我們訪問和操縱流

在這裏插入圖片描述
在這裏插入圖片描述

  • 查詢流的狀態.

  • 管理流的狀態.

  • 管理輸出緩衝.每個輸出流都管理一個緩衝區,用來保持程序讀寫的數據,允許os將多個輸出操作組合爲單一的設備寫操作可以帶來很大的性能提升。導致緩衝刷新的原因有很多:
    程序正常結束
    緩衝區滿
    操縱符endl
    操縱符unitbuf設置流的內部狀態, 默認cerr是設置unitbuf
    一個輸出流可能被關聯到另一個流,當讀寫被關聯的流是,關聯到的流的緩衝區會被刷新,默認cin和cerr都關聯到cout

  • 刷新輸出緩衝區.IO庫中還有兩個類似的操作符flushendsflush刷新緩衝區,但不輸出任何額外的字符;ends向緩衝區插入一個空字符,然後刷新緩衝區。
    在這裏插入圖片描述

  • unitbuf操縱符.在每次寫操作之後都進行一次flush操作。而nounitbuf操縱符則重置流
    在這裏插入圖片描述

  • 如果程序崩潰,輸出緩衝區不會被刷新

  • 關聯輸入和輸出流.交互式系統通常應該關聯輸入流和輸出流。這意味着所有輸出,包括用戶提示信息,都會在讀操作之前被打印出來。

  • 關聯符tie.
    在這裏插入圖片描述


8.2 文件輸入輸出

  • 頭文件fstream定義了三個類型來支持文件IO。ifstream從一個給定文件讀取數據,ofstream向一個給定文件寫入數據,以及fstream可以讀寫給定文件
    在這裏插入圖片描述

  • 讀寫一個文件時,定義一個文件流對象,將文件流對象與文件關聯起來,每個文件流類都定義了一個名爲open的成員函數,完成一些系統相關的操作。如果提供文件名(可選),則open會自動被調用
    在這裏插入圖片描述

  • 用fstream代替iostream&.在要求使用基類型對象的地方,我們可以用繼承類型的對象來替代。意味着,接受一個iostream類型引用(或指針)參數的函數,可以用一個對應的fstream(或sstream)類型來調用。

  • 成員函數open和close.當一個fstream對象被銷燬時,close會自動被調用

  • 文件模式.每個流都有一個關聯的文件模式,用來指出如何使用文件
    在這裏插入圖片描述
    在這裏插入圖片描述
    與ifstream關聯的文件默認以in模式打開;
    與ofstream關聯的文件默認以out模式打開;
    與fstream關聯的文件默認以in和out模式打開;


8.3 string流

  • isstringstream從string讀取數據, ostringstream向string寫入數據, stringstream既可從string中讀數據也可向string寫數據
    在這裏插入圖片描述

  • 使用istringstream
    在這裏插入圖片描述

  • 使用ostringstream
    在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章