在使用任何名字空間之前,編譯器必須能夠找到他,即確定他的宣告所在的作用域。使用某個名字空間中的名字最簡單的方式就是使用限定名字,即把名字空間的名字(如ns1)作為字首,然後加上作用域操作符(::)。
然而又是可能不願使用名字空間以追求**簡潔。可以通過下面實現:
1.使用using指令
如:using namespace std;
語法:關鍵字using,關鍵字namespace,乙個名字空間名字。using指令指導編譯器把該名字空間的名字視為全域性一般對待。
2.使用using宣告
如:using ns1::rational;
比起using指令,使用using宣告會更加具體,從而減少了危險性。using宣告將另乙個名字空間中的某個名字引入到區域性作用域中。
using宣告將名字加入到區域性作用域中,起到同顯示宣告它一樣的效果。因此,在使用using宣告的作用域內使用被宣告的名字時不需要加上限定(如rational)。
3.對比using指令與using宣告
#include
#incldue
void demonstrate_using_directive()
void demonstrate_using_declaration()
區域性變數ostream和using宣告衝突,但和using指令不衝突。對於乙個名字,乙個區域性作用域中只能有乙個物件或型別使用該名字,而using宣告會把該名字加入到該區域性作用域中,但using指令不會。
4.類中的using宣告
using宣告也可以引入類的某個成員,和名字空間的using宣告不同,不能隨意向任何存在的類引入任何存在的成員,但是可以向某個派生類引入其積累的某個名字。在幾種場合中需要使用它,常見的有如下兩個:
1)基類宣告了某個函式,其派生類也宣告了乙個同名函式,且希望能通過過載找到這兩個函式。編譯器只會在單一的類作用域中尋找過載,使用using宣告將基類函式引入派生類作用域,則在處理過載時,就會在派生類作用域中查詢這兩個函式,並選出最佳匹配項。
2)在私有繼承時,通過在派生類的公有段使用using宣告,可以有選擇地公開一些成員。
例:#include
#incldue
class base
};class derived1:public base
};class derived2:public base
};int main()
輸出:derived:42
base:42
C 名字空間
namespace 名字空間名 注 名字空間成員可以是全域性變數 全域性函式 型別 名字空間 作用域限定操作符 名字空間名 要訪問的成員 include namespace nm1 namespace nm2 intmain 當名字沒有重複的時候,我們可以簡化 方法一 名字空間指令 格式 using...
玩轉C 名字空間
一 概要 名字空間是一種描述邏輯分組的機制。也就是說,如果有一些宣告按照某種準則在邏輯上屬於同乙個集團,就可以將它們放入同乙個名字空間,以表明這個事實。名字空間就是為了表示邏輯結構。同時也避免了名字衝突。名字空間的宣告和定義 namespace namespace name ps 只有名字空間的宣告...
C 的名字空間
1 名字空間的作用 1 避免名字衝突 2 劃分邏輯單元 2 定義名字空間 namespace 名字空間 struct student namespace ns2 3 名字空間成員的使用 1 通過作用域限定操作 空間成員 要訪問的成員 eg int main void 02namespace.cpp ...