C 命名空間

2021-07-04 10:45:48 字數 1494 閱讀 2749

c++ 標準中引入命名空間的概念,是為了解決不同模組或者函式庫中相同識別符號

衝突的問題。

有了命名空間的概念,識別符號就被限制在特定的範圍呢,不會引起命名衝突。最典型的例子就是std 命名空間,c++ 標準庫中所有識別符號都包含在std命名空間中。

不同模組或者函式庫中相同識別符號衝突的問題示例:

x.h

1

namespace

mynamespace01;

8int

myclass::f()

11 }

y.h

1

namespace

mynamespace02;

8int

myclass::f()

11 }

z.cpp

1 #include2 #include "

x.h"

3 #include "

y.h"

4using

namespace

std;56

void

main()

如果確信在程式中引用某個或者某些程式庫不會引起命名衝突,那麼可以通過using操作符來簡化對程式庫中識別符號(通常時函式)的使用,例如:using namespace std;

那麼就可以不用在識別符號在字首std:: 來使用c++ 標準庫庫中的函式了。

所謂namespace,是識別符號的可見範圍。c++標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中。由於namespace的概念,使用c++標準程式庫的任何識別符號時,可以有三種選擇:

1、直接指定識別符號。例如std::ostream而不是ostream。完整語句如下:

std::hex是用來進行十六進製製流的輸出,例如:255的十六進製制數是ff。

1 #include2

3void

main()

2、使用using關鍵字。

1 #include2

using

std::cout;

3using

std::endl;45

void

main()

3、最方便的就是使用using namespace std;

1 #include2

using

namespace

std;

3void

main()

因為標準庫非常的龐大,所程式設計師在選擇的類的名稱或函式名時就很有可能和標準庫中的某個名字相同。所以為了避免這種情況所造成的名字衝突,就把標準 庫中的一切都被放在名字空間std中。但這又會帶來了乙個新問題。無數原有的c++**都依賴於使用了多年的偽標準庫中的功能,他們都是在全域性空間下的。所以就有了和等等這樣的標頭檔案,乙個是為了相容以前的c++**,乙個是為了支援新的標準。命名空間std封裝的是標準程式庫的名稱,標準程式庫為了和以前的標頭檔案區別,一般不加".h"

**:

spring p命名空間 c命名空間

p命名空間 1.需要引入命名空間p 並不真實存在 是在spring內部中實現的 xmlns p 2.如果是引用注入需要加 ref字尾 p和c命名空間 並不適用於集合引數 c命名空間 1.需要引入命名空間c 並不真實存在 是在spring內部中實現的 xmlns c 2.可以使用c 引數名 或c 引數...

C 命名空間 預設命名空間與匿名命名空間

2.匿名命名空間 預設命名空間也叫全域性命名空間,所有沒有置於某一具體命名空間下的 即在預設命名空間下,例如func main 函式。include void func void intmain int argc,char ar void func void 需要注意的是 這個就是類似於c語言裡簡單...

C 命名空間,也有叫命名空間

在c 中,名稱 name 可以是符號常量 變數 巨集 函式 結構 列舉 類和物件等等。為了避免在大規模程式設計中,以及在程式設計師使用各種各樣的c 庫時,這些識別符號的命名發生衝突,標準c 引入了關鍵字namespace 命名空間 名字空間 命名空間 名域 可以更好地控制識別符號的作用域。std是c...