在c++語言編寫的程式中,變數和函式等的作用範圍是有一定限制的。比如,在函式體中定義的乙個臨時變數就不可以在函式體外使用。為了解決變數和函式等的作用範圍,在c++語言中引入了名空間的概念,並增加了關鍵字namespace和using
在乙個名空間中可以定義一組變數和函式,這些變數和函式的作用範圍一致,可以將jaomlzlla這些變數和函式稱為這個名空間的成員。
通過名空間,可以在同乙個檔案中使用相同的變數名或函式名,只要它們屬於不同的名空間。另外,名空間可以使得**操作具有相同名字但屬於不同庫的變數。而且,名空間也可以提高c語言與c++語言的相容性。
下面通過例程說明關鍵字namespace的用法。
#include
#include
namespace car // 名空間的定義
namespace plane
}namespace car // 新增名空間的成員
namesp程式設計客棧ace c=car; // 定義名空間的別名
int time; // 外部變數屬於全域性名空間
void main()
{ car::length=3;
// 下面一句錯誤,故遮蔽掉
// width=2; // 對於非全域性變數和當前有效臨時變數應該指定名空間
plane::size::length=70;
cout<
執行結果:
the length of plane is 70m.
the length of car is 3m.
the length of c is 3m.
temp time is 1996
outer time is 1997
說明:• 從上面可以看出,名空間定義了一組變數和函式,它們具有相同的作用範圍。對於不同的
名空間,可以定義相同的變數名或函式名,在使用的時候,只要在變數名或函式名前區分
開不同的名空間就可以了。
&程式設計客棧#8226; 名空間可以被巢狀定義,使用時要逐級對成員用名空間限定符: :來引用。
•&程式設計客棧#160;系統預設有乙個全域性名空間,它包含了所有的外部變數。這個名空間沒有名字,引用這個
名空間裡的變數時要使用名空間限定符: :,前面沒有名字。在不使用名空間的情況下,我
們知道,不可以在不同檔案中定義相同名字的外部變數,這是因為它們屬於同乙個全域性名
空間,名字不可以重複。
• 可以給名空間取乙個別名。一般別名是乙個比較短的名字,來簡化程式設計。
• 在原有定義好的名空間的基礎上,隨時可以往裡增加成員。
<
在前面的例程中可以看到,為了使用時的方便,又引入了關鍵字using。利用using宣告可以在引用名空間成員時不必使用名空間限定符::。此外,關鍵字namespace和using的使用,對函式過載有一定的影響。
下面通過例程進行具體說明。
#include
#include
namespace car // 名空間的定義
{ void showlength(double len) // 引數型別為d o u b l e
{ cout<
執行結果:
in car namespace: 3
in car jaomlzlla;namespace: 3.8
in plane namespace: 93
in car namespace: 93.75
說明:如果沒有名空間的干擾,函式過載時選擇規則將是非常簡單。只要實參是double型別,則呼叫的是前面的函式;如果實參是int型別,則呼叫後面的函式。但是由於名空間的參與,就出現了上面的執行結果。所以在程式設計的時候一定要注意名空間對函式過載的影響。
應注意:呼叫函式時,如果實參和形參的資料型別實在沒有辦法完全匹配,可能會對實參進行適當的資料型別轉換。比如,將char型別轉換為int型別,或進一步將int型別轉換為double型別。這種是將資料型別從簡單往複雜轉換,一般不會丟失資訊。另外一種轉換是反過來,將double型別轉換為int型別,或進一步將int型別轉換為char型別。這種是將資料型別從複雜往簡單轉換,可能會丟失部分資訊。在呼叫函式的時候,不同的情況下,c++對上述兩種轉換的優先順序是不同的。當引入了名空間後,則參與了上述優先順序順序的分配。
using namespace std之後,就省去了std::,可以直接引用std空間裡面的函式和變數。
C namespace命名空間詳解
命名空間 在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免,在大規模程式的設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用...
c namespace 命名空間
using namespace std using編譯指令,它會一次性把std空間中的所有實體全部引進來 namespace wd end of namespace wd namespace tls end of namespace tls int main void using std cout ...
C namespace 小點大用處
c 中的namespace只是很小的乙個點,但在專案規模越來越大和多人協作的場景中,起著十分重要的作用。例如我們寫測試例子,沒有必要建立建很多檔案,還要避免類名和方法名衝突,直接通過namespace進行隔離即可。程式如下 include using namespace std namespace ...