C++ 頭文件系列(istream)


1. 簡介

其實叫它istream有點不合適,因為該頭文件不僅定義了istream,還定義了iostream

2. basic_istream模版

basic_istream繼承自basic_ios,也是其它輸入流的基類。

2.1 sentry類

The class sentry defines a class that is responsible for doing exception safe prefix and suffix operations.

sentry是哨兵的意思,標准給出的解釋是,這個類是為了做一些異常安全的前置和后置工作。 所有格式化輸入函數在執行前都會構造一個sentry對象,如果該對象構造成功,這些函數會繼續執行; 否則,格式化函數會根據情況設置badbit位,並拋出異常。

2.2 格式化輸入函數

  • operator >> : 該運算符有多個重載版本,分別定義了包括bool、short、unsigned等在內的多個格式化輸入。 但注意,這些函數不包括對char有關類型的重載(但C++14好像有)

2.3 非格式化輸入函數

  • gcount : 返回上一次非格式化函數提取的字符數
  • get : 提取字符。
  • getline : 提取一行字符。
  • ignore : 提取並且放棄字符。
  • peek : “peek”下一個字符,不提取
  • read : 提取一塊字符。
  • readsome : 提取內部流緩沖區存有的字符。
  • putback放回最近提取的一個字符。
  • unget : “un-get”一個字符。

2.4 流定位函數

  • tellg : 返回輸入流當前字符的當前位置
  • seekg : 設置輸入流的當前位置。

2.5 同步函數

  • sync : 這個函數有點難理解,它的內部調用順序是istream::sync -> basic_streambuf::pubsync -> basic_streambuf::sync。 因此要從底層函數的語義去理解它:將緩沖區的內容與關聯的字符流同步。 因此,如果是標准輸入流,則是將緩沖區的內容清空,保持與鍵盤輸入的同步; 如果是文件流,則是將緩沖區內容與文件內容同步。

3 basic_iostream模版

該模版只是簡單地多繼承了basic_istream和basic_ostream,並定義了幾個protected的移動賦值運算符和swap成員函數。

4 manipulators

5 typedefs

  • typedef basic_istream<char> istream
  • typedef basic_istream<wchar_t> wistream
  • typedef basic_iostream<char> iostream
  • typedef basic_iostream<wchar_t> wiostream


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM