c 名字空間指令與名字空間宣告

2021-06-21 15:21:02 字數 1286 閱讀 7788

在使用任何名字空間之前,編譯器必須能夠找到他,即確定他的宣告所在的作用域。使用某個名字空間中的名字最簡單的方式就是使用限定名字,即把名字空間的名字(如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 ...