天天看點

關于頭檔案和命名空間

iostream

iostream 的意思是 輸入輸出流

直接點說就是in(輸入) out(輸出) stream(流)

取 in out 的首字母與 stream 合成

c++語言中

#include<iostream>是标準的c++頭檔案,任何符合标準的c++開發環境都有這個頭檔案。

  在舊的标準c++中,使用#include<iostream.h>

  但在新标準中,用#include<iostream>,而且在vs中程式設計的同時要注意要添加:

  using namespace std;

  using namespace std詳解

  一 :

  <iostream>和<iostream.h>是不一樣,前者沒有字尾,實際上,在你的編譯器include檔案夾裡面可以看到,二者是兩個檔案,打開檔案就會發現,裡面的代碼是不一樣的。

  字尾為.h的頭檔案c++标準已經明确提出不支援了,早些的實作将标準庫功能定義在全局空間裡,聲明在帶.h字尾的頭檔案裡,c++标準為了和c差別開,也為了正确使用命名空間,規定頭檔案不使用字尾.h。

  是以,當使用<iostream.h>時,相當于在c中調用庫函數,使用的是全局命名空間,也就是早期的c++實作;當使用<iostream>的時候,該頭檔案沒有定義全局命名空間,必須使用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 <iostream>

  #include <sstream>

  #include <string>

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

  cout << hex << 3.4 << endl;

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

  是以就有了<iostream.h>和<iostream>等等這樣的頭檔案,一個是為了相容以前的c++代碼,一個是為了支援新的标準。

  命名空間std封裝的是标準程式庫的名稱,标準程式庫為了和以前的頭檔案差別,一般不加".h"