天天看點

C++ namespace詳細介紹

編寫程式過程中,名稱(name)可以是符号常量、變量、函數、結構、枚舉、類和對象等等。工程越大,名稱互相沖突性的可能性越大。另外使用多個廠商的類庫時,也可能導緻名稱沖突。為了避免,在大規模程式的設計中,以及在程式員使用各種各樣的 C++ 庫時,這些辨別符的命名發生沖突,标準 C++ 引入關鍵字 namespace(命名空間/名字空間/名稱空間),可以更好地控制辨別符的作用域。

例如,我們在 C 語言中,通過 static 可以限制名字隻在目前編譯單元内可見,在 C++ 中我們通過 namespace 來控制對名字的通路。

  1. namespace 文法
  2. namespace 中可定義常量、變量、函數、結構體、枚舉、類等
  3. namespace 隻能在全局定義。
  4. namespace 支援嵌套定義。
  5. namespace 是開放的,可随時添加新的成員。
  6. namespace 關鍵字可以為已有空間名字增加别名
  7. 無名命名空間意味着命名空間中的符号隻能在本檔案中通路,相當于給符号增加了 static 修飾。推薦了解

1.1 namespace 可包含的成員

C++ namespace詳細介紹

1.2 namespace 隻能在全局定義

C++ namespace詳細介紹

1.3 namespace 支援嵌套定義

C++ namespace詳細介紹

名字空間 my_space 中可以嵌套定義子名字空間 my_sub_space.

1.4 namespace 是開放的,随時可添加成員

C++ namespace詳細介紹

1.5 namespace 為已有空間名字建立别名

C++ namespace詳細介紹

1.6 namespace 匿名名字空間

無名命名空間意味着命名空間中的符号隻能在本檔案中通路,相當于給符号增加了 static 修飾,隻能在目前檔案内通路。

C++ namespace詳細介紹

2. 使用 namespace 中符号

使用名字空間中定義的符号有三種方式:

  1. 直接通過 namespace 作用域通路
  2. using 聲明指定某個符号在某個作用域下可見
  3. using 編譯指令指定名字空間中所有符号在在某個作用域下可見

2.1 直接通路

C++ namespace詳細介紹

2.2 using 聲明

using 聲明指定某個符号在某個作用域下可見。例如:

C++ namespace詳細介紹

2.3 using 編譯指令

using 編譯指令指定名字空間中所有符号在在某個作用域下可見。

C++ namespace詳細介紹
C++學習路線圖

繼續閱讀