C++程序中能夠沒有using namespace std;這一句嗎

能夠啊、、只是命名空間的聲明而已。意思就是說下面的函數,若是有和stl庫裏面一個名字的,就是用的stl的函數

C++ using namespace std 詳解
 所謂namespace,是指標識符的各類可見範圍。C++標準程序庫中的全部標識符都被定義於一個名爲std的namespace中。
一 :
<iostream>和<iostream.h>是不同,前者沒有後綴,實際上,在你的編譯器include文件夾裏面能夠看到,兩者是兩個文件,打開文件就會發現,裏面的代碼是不同的。
後綴爲.h的頭文件c++標準已經明確提出不支持了,早些的實現將標準庫功能定義在全局空間裏,聲明在帶.h後綴的頭文件裏,c++標準爲了和C區別開,也爲了正確使用命名空間,規定頭文件不使用後綴.h。
所以,當使用<iostream.h>時,至關於在c中調用庫函數,使用的是全局命名空間,也就是早期的c++實現;當使用<iostream>的時候,該頭文件沒有定義全局命名空間,必須使用namespacestd;這樣才能正確使用cout。
二:
所謂namespace,是指標識符的各類可見範圍。
C++標準程序庫中的全部標識符都被定義於一個名爲std的namespace中。
因爲namespace的概念,使用C++標準程序庫的任何標識符時,能夠有三種選擇:
一、直接指定標識符。例如std::ostream而不是ostream。完整語句以下:
std::cout << std::hex<< 3.4<< std::endl;
二、使用using關鍵字。
using std::cout;
using std::endl;
以上程序能夠寫成
cout << std::hex<< 3.4<< endl;
三、最方便的就是使用using namespace std;
例如:
#include <iostream>
#include <sstream>
#include <string>
using namespace std;
這樣命名空間std內定義的全部標識符都有效(曝光)。就好像它們被聲明爲全局變量同樣。那麼以上語句能夠以下寫:
cout << hex<< 3.4<< endl;
由於標準庫很是的龐大,所程序員在選擇的類的名稱或函數名時就頗有可能和標準庫中的某個名字相同。因此爲了不這種狀況所形成的名字衝突,就把標準庫中的一切都被放在名字空間std中。但這又會帶來了一個新問題。無數原有的C++代碼都依賴於使用了多年的僞標準庫中的功能,他們都是在全局空間下的。
因此就有了<iostream.h>和<iostream>等等這樣的頭文件,一個是爲了兼容之前的C++代碼,一個是爲了支持新的標準。
命名空間std封裝的是標準程序庫的名稱,標準程序庫爲了和之前的頭文件區別,通常不加".h"ios

相關文章
相關標籤/搜索