輸入/輸出

輸入/輸出庫
click on an element for detailed information

iostream 庫是一個面向物件的庫,使用流提供輸入和輸出功能。

流是一種抽象,代表在其上執行輸入和輸出操作的裝置。流基本上可以表示為一個無限長度的字元源或目標。

流通常與一個物理字元源或目標相關聯,例如磁碟檔案、鍵盤或控制檯,因此從我們稱之為流的抽象中獲取或寫入的字元會物理地輸入/輸出到物理裝置。例如,檔案流是用於操作和與檔案互動的 C++ 物件;一旦使用檔案流開啟檔案,在該流上執行的任何輸入或輸出操作都會物理地反映在檔案中。

為了操作流,C++ 提供了標準的iostream庫,其中包含以下元素

基本類模板
iostream 庫的基礎是類模板的層次結構。類模板以型別無關的方式提供了庫的大部分功能。

這是一組類模板,每個類模板都有兩個模板引數:字元型別 (charT) 引數,它決定了要操作的元素型別;以及 traits 引數,它為特定型別的元素提供了額外的特性。

這個類層次結構中的類模板與其字元型別例項化的名稱相同,但帶有字首basic_。例如,istream例項化的類模板叫做basic_istream,而fstream例項化的叫做basic_fstream,等等……唯一的例外是ios_base,它本身是型別無關的,因此不是基於模板,而是一個常規類。

類模板例項化
該庫包含了整個 iostream 類模板層次結構的兩套標準例項化:一套是窄向的,用於操作char型別的元素;另一套是寬向的,用於操作wchar_t.

型別的元素。窄向(char型別)的例項化可能是 iostream 庫中更為人所知的部分。像ios, istream、ofstream這樣的類都是窄向的。本頁頂部的圖表顯示了窄向類的名稱和關係。

寬向(wchar_t)例項化的類遵循與窄向例項化相同的命名約定,但每個類和物件的名稱都以w字元為字首,例如構成wios, 、wistream、wofstream等。

標準物件
作為 iostream 庫的一部分,標頭檔案<iostream>聲明瞭某些用於在標準輸入和輸出上執行輸入和輸出操作的物件。

它們分為兩組:窄向物件,即廣為人知的cin, 、cout, 、cerr、clog,以及它們對應的寬向物件,宣告為wcin, 、wcout, 、wcerr、wclog.

型別
iostream 類在其成員的原型中很少使用基本型別。它們通常使用定義的型別,這些型別取決於其例項化中使用的 traits。對於預設的charwchar_t例項化,使用streampos, 、streamoff和 streamsize型別來分別表示位置、偏移量和大小。

操縱符
操縱符是全域性函式,設計用於與在iostream流物件上執行的插入 (<<) 和提取 (>>) 運算子一起使用。它們通常修改流的屬性和格式設定。endl, 、hex和 scientific是操縱符的一些例子。

組織結構

該庫及其類層次結構被分割在不同的檔案中
  • <ios>, <istream>, <ostream>, <streambuf><iosfwd>通常不會在大多數 C++ 程式中直接包含。它們描述了層次結構的基類,並由庫中包含派生類的其他標頭檔案自動包含。
  • <iostream>聲明瞭用於透過標準輸入和輸出進行通訊的物件(包括cin、cout).
  • <fstream>定義了檔案流類(如模板basic_ifstream或類、ofstream)以及與這些類一起使用的內部緩衝物件(basic_filebuf)。這些類用於使用流來操作檔案。
  • <sstream>:此檔案中定義的類用於將 string 物件當作流來操作。
  • <iomanip>聲明瞭一些帶引數的標準操縱符,與提取和插入運算子一起使用,以修改內部標誌和格式選項。

相容性說明

本參考中為 iostream 類包含的名稱、原型和示例主要描述和使用char類模板的例項化,而不是模板本身,儘管這些類只是其可能的例項化之一。我們認為這提供了更好的可讀性,並且從char例項化中獲取基本模板的名稱和原型與反向操作一樣簡單。

iostream 庫的元素(char 例項化)

:

物件:

型別:

操縱符: