iostream

iostream

編程語音中的庫頭文件
iostream是指輸入輸出流,直接點說就是in(輸入) 、out(輸出)、 stream(流)。取in、out的首字母與stream合成。iostream庫的基礎是類模闆的層級結構,其中的類很少對其成員的原型使用基本類型,而是通常使用根據其實例的特性定義的類型。
  • 中文名:輸入輸出流
  • 外文名:
  • 别名:
  • 英文名:iostream
  • 定義:4個IO對象
  • 含義:in、out的首字母與stream

組成

此頭文件是輸入/輸出庫的一部分。

包含  表現為如同它定義一個 std::ios_base::Init 類型的靜态存儲期對象:若它是首個要被構造的 std::ios_base::Init 對象,則其構造函數初始化各個标準流對象,而若它是最後被銷毀的 std::ios_base::Init 對象,則其析構函數将會沖洗這些對象(除了 cin 和 wcin)。

标準庫定義了 4 個 IO 對象。處理輸入時使用命名為 cin(讀作 see-in)的 istream 類型對象。這個對象也稱為标準輸入。處理輸出時使用命名為 cout(讀作 see-out)的 ostream 類型對象,這個對象也稱為标準輸出。标準庫還

定義了另外兩個 ostream 對象,分别命名為 cerr 和 clog(分别讀作“see-err”和“see-log”)。cerr 對象又叫作标準錯誤,通常用來輸出警告和錯誤信息給程序的使用者。而 clog 對象用于産生程序執行的一般信息。

基本類模闆

iostream(.h)庫的基礎是類模闆的層級結構。類模闆以一種與類型無關的方式,提供了這個庫的大部分功能。

基本類模闆是一個類模闆的集合,其中每個類模闆有兩個參數:字符類型(charT)參數決定處理的元素類型,而特性參數對每個特定的元素類型提供一些額外的特征。

這個類層級結構中的類模闆和它們的字符類型的實例相比,名字前面多了前綴basic_。例如,istream由之實例化而來的類模闆名為basic_istream,fstream由之實例化而來的類模闆名為basic_fstream,等等。唯一的例外是ios_base,因為它本身就是類型無關的,所以它并不基于任何類模闆,而是一個正規類。

類模闆實例

iostream(.h)庫中集成了兩組标準的整個iostream類模闆層級結構的實例:一組是面向單字節的,處理char類型的元素;另一組是面向寬字節的,處理wchar_t類型的元素。

面向單字節(char型)的實例可能是iostream(.h)庫更為人所知的一部分。ios、istream和ofstream等類都是面向單字節的。右圖是面向單字節的所有類的名稱和關系。

面向寬字節(wchar_t型)的實例的命名規則與面向單字節的實例相同,但所有類和對象名稱前有前綴w,例如wios、wistream和wofstream。

标準對象

作為iostream(.h)庫的一部分,頭文件聲明了一些用來在标準輸入輸出設備上進行輸入輸出操作的對象。

這些對象分為兩組:面向單字節的,即常見的cin、cout、cerr和clog;其面向寬字節的對應物,聲明為wcin、wcout、wcerr和wclog。

類型

iostream(.h)庫中的類很少對其成員的原型使用基本類型,而是通常使用根據其實例的特性定義的類型。對默認的char和wchar_t型的實例,類型streampos、streamoff和streamsize分别用以表示位置、偏移和大小。

操縱符

操縱符是用來與對流對象進行操作的插入(<<)和提取(>>)運算符一同使用的全局函數。它們通常變更流的屬性和格式設置。endl、hex和scientific是一些操縱符的例子。

C++語言中

#include是标準的C++頭文件,任何符合标準的C++開發環境都有這個頭文件。

在舊的标準C++中,使用#include

但在新标準中,用#include,而且在VC中編程的同時要注意要添加:

using namespace std;

在C++中,輸入輸出流被定義為類。C++的I/O庫中的類稱為流類(stream class)。用流類定義的對象稱為流對象。

using namespace std詳解

一 :

和是不一樣,前者沒有後綴,實際上,在你的編譯器include文件夾裡面可以看到,二者是兩個文件,打開文件就會發現,裡面的代碼是不一樣的。

後綴為.h的頭文件c++标準已經明确提出不支持了,早些的實現将标準庫功能定義在全局空間裡,聲明在帶.h後綴的頭文件裡,c++标準為了和C區别開,也為了正确使用命名空間,規定頭文件不使用後綴.h。

因此,當使用時,相當于在c中調用庫函數,使用的是全局命名空間,也就是早期的c++實現;當使用的時候,該頭文件沒有定義全局命名空間,必須使用namespace std;這樣才能正确使用cout。

二:

所謂namespace,是指标識符的各種可見範圍。

C++标準程序庫中的所有标識符都被定義于一個名為std的namespace中。

由于namespace的概念,使用C++标準程序庫的任何标識符時,可以有三種選擇:

1、直接指定标識符。例如std::ostream而不是ostream。完整語句如下:

std::cout << std::hex << 3.4 << std::endl;

2、使用using關鍵字。

using std::cout;

using std::endl;

以上程序可以寫成

cout << std::hex << 3.4 << endl;

3、最方便的就是使用using namespace std;

例如:

#include

#include

#include

using namespace std;

這樣命名空間std内定義的所有标識符都有效(曝光)。就好像它們被聲明為全局變量一樣。那麼以上語句可以如下寫:

cout << hex << 3.4 << endl;

在iostream文件頭中定義的類有ios,istream,ostream,iostream,istream_withassign,ostream_withassign,iostream_withassign等。

因為标準庫非常的龐大,所以程序員在選擇的類的名稱或函數名時就很有可能和标準庫中的某個名字相同。所以為了避免這種情況所造成的名字沖突,就把标準庫中的一切都放在名字空間std中。但這又會帶來了一個新問題。無數原有的C++代碼都依賴于使用了多年的僞标準庫中的功能,他們都是在全局空間下的。

所以就有了和等等這樣的頭文件,一個是為了兼容以前的C++代碼,一個是為了支持新的标準。

命名空間std封裝的是标準程序庫的名稱,标準程序庫為了和以前的頭文件區别,一般不加".h"

相關詞條

相關搜索

其它詞條