c++命名空間基本常識:
所謂namespace,是指識別符號的各種可見範圍。c++標準程式庫中的所有識別符號都被定義於乙個名為
std的
namespace中。一
:和格式不一樣,前者沒有字尾,實際上,在你的編譯器
include
資料夾裡面可以看到,二者是兩個檔案,開啟檔案就會發現,裡面的**是不一樣的。字尾為.h的標頭檔案
c++標準已經明確提出不支援了
,早些的實現將標準庫功能定義在全域性空間裡,宣告在帶.h字尾的標頭檔案裡,
c++標準為了和
c區別開,也為了正確使用命名空間,規定標頭檔案不使用字尾
.h。 因此:
1)當使用
時,相當於在
c中呼叫庫函式,使用的是全域性命名空間,也就是早期的
c++實現;2)
當使用的時候,該標頭檔案沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout。
二:由於namespace的概念,使用
c++標準程式庫的任何識別符號時,可以有三種選擇:
1、直接指定識別符號。例如
std::ostream
而不是ostream
。完整語句如下:
std::cout << std::hex << 3.4 << std::endl;
2、使用
using
關鍵字。
using std::cout; using std::endl; using std::cin;
以上程式可以寫成
cout << std::hex << 3.4 << endl;
3、最方便的就是使用
using namespace std;
例如:
using namespace std;
這樣命名空間
std內定義的所有識別符號都有效(**)。就好像它們被宣告為全域性變數一樣。那麼以上語句可以如下寫
: cout 因為標準庫非常的龐大,所以程式設計師在選擇的類的名稱或函式名時就很有可能和標準庫中的某個名字相同。所以為了避免這種情況所造成的名字衝突,就把標準庫中的一切都被放在名字空間
std中。但這又會帶來了乙個新問題。無數原有的
c++**都依賴於使用了多年的偽標準庫中的功能,他們都是在全域性空間下的。所以就有了
和等等這樣的標頭檔案,乙個是為了相容以前的
c++**,乙個是為了支援新的標準。命名空間
std封裝的是標準程式庫的名稱,標準程式庫為了和以前的標頭檔案區別,一般不加
".h"。
c++命名空間定義及使用語法:
在c++中,名稱(
name
)可以是符號常量、變數、巨集、函式、結構、列舉、類和物件等等。為了避免,在大規模程式的設計中,以及在程式設計師使用各種各樣的
c++庫時,這些識別符號的命名發生衝突,標準c++引入了關鍵字namespace(命名空間/名字空間/命名空間/名域),可以更好地控制識別符號的作用域。
std是
c++標準命名空間,
c++標準程式庫中的所有識別符號都被定義在
std中,比如標準庫中的類
iostream
、vector等都定義在該命名空間中,使用時要加上using宣告(using namespace std) 或using指示(如std::string、std::vector)。
c中的命名空間:
在c語言中只有乙個全域性作用域;
c語言中所有的全域性識別符號共享同乙個作用域;
識別符號之間可能發生衝突;
c++中提出了命名空間的概念:
命名空間將全域性作用域分成不同的部分;
不同命名空間中的識別符號可以同名而不會發生衝突;
命名空間可以相互巢狀;
全域性作用域也叫預設命名空間;
c++命名空間的定義
:namespace name
c++命名空間的使用:
使用整個命名空間:using namespace name;
使用命名空間中的變數:using name::variable;
使用預設命名空間中的變數:::variable;
預設情況下可以直接使用默
認命名空間中的所有識別符號。
程式設計實踐:
#include #include namespace namespacea
namespace namespaceb; }
}int main()
; printf("t1.name = %s\n", t1.name);
printf("t1.age = %d\n", t1.age);
return 0;
}
輸出結果:
結論:當使用
的時候,該標頭檔案
沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout。若不引入using namespace std ,需要這樣做。
std::cout
。c++標準為了和c區別開,也為了正確使用命名空間,規定標頭檔案
不使用字尾.h。
c++命名空間的定義: namespace name
using namespace namespacea;
namespce定義可巢狀。
Namespace 命名空間
namespace 命名空間。命名空間是用來解決不同的類和函式擁有相同的名稱的問題。解決了命名衝突的問題。namespace gxg namespace gaoxiaoguang 使用方法 gxg a gxga gaoxiaoguang a gaoxiaoguanga gxg bfunction g...
命名空間namespace
對using namespace std 的解釋 所謂namespace,是指識別符號的各種可見範圍。c 標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中。由於namespace的概念,使用c 標準程式庫的任何識別符號時,可以有三種選擇 1 直接指定識別符號。例如std os...
namespace 命名空間
在討論如何使用命名空間之前,必須了解 php 是如何知道要使用哪乙個命名空間中的元素的。可以將 php 命名空間與檔案系統作乙個簡單的模擬。在檔案系統中訪問乙個檔案有三種方式 相對檔名形式如foo.txt。它會被解析為 currentdirectory foo.txt,其中 currentdirec...