編寫程序過程中,名稱(name)可以是符號常量、變量、函數、結構、枚舉、類和對象等等。工程越大,名稱互相沖突性的可能性越大。另外使用多個廠商的類庫時,也可能導致名稱沖突。為了避免,在大規模程序的設計中,以及在程序員使用各種各樣的 C++ 庫時,這些標識符的命名發生沖突,標準 C++ 引入關鍵字 namespace(命名空間/名字空間/名稱空間),可以更好地控制標識符的作用域。
例如,我們在 C 語言中,通過 static 可以限制名字只在當前編譯單元內可見,在 C++ 中我們通過 namespace 來控制對名字的訪問。
1. namespace 語法
1. namespace 中可定義常量、變量、函數、結構體、枚舉、類等
2. namespace 只能在全局定義。
3. namespace 支持嵌套定義。
4. namespace 是開放的,可隨時添加新的成員。
5. namespace 關鍵字可以為已有空間名字增加別名
6. 無名命名空間意味著命名空間中的符號只能在本文件中訪問,相當于給符號增加了 static 修飾。
1.1 namespace 可包含的成員
1.2 namespace 只能在全局定義
1.3 namespace 支持嵌套定義
名字空間 my_space 中可以嵌套定義子名字空間 my_sub_space.
1.4 namespace 是開放的,隨時可添加成員
1.5 namespace 為已有空間名字創建別名
1.6 namespace 匿名名字空間
無名命名空間意味著命名空間中的符號只能在本文件中訪問,相當于給符號增加了 static 修飾,只能在當前文件內訪問。
2. 使用 namespace 中符號
使用名字空間中定義的符號有三種方式:
1. 直接通過 namespace 作用域訪問
2. using 聲明指定某個符號在某個作用域下可見
3. using 編譯指令指定名字空間中所有符號在在某個作用域下可見
2.1 直接訪問
2.2 using 聲明
using 聲明指定某個符號在某個作用域下可見。例如:
2.3 using 編譯指令
using 編譯指令指定名字空間中所有符號在在某個作用域下可見。
-
C語言
+關注
關注
180文章
7630瀏覽量
140958 -
編譯
+關注
關注
0文章
676瀏覽量
33867
發布評論請先 登錄
如何從 Microsoft Visual C++ 應用程序 (CyAPI.h) 訪問 CYUSB3014 芯片組的 i2c 接口?
使用C++中的CyAPI編寫的應用程序上遇到了問題,求解決
創建了用于OpenVINO?推理的自定義C++和Python代碼,從C++代碼中獲得的結果與Python代碼不同是為什么?
從Delphi、C++ Builder和Lazarus連接到MySQL數據庫

AKI跨語言調用庫神助攻C/C++代碼遷移至HarmonyOS NEXT
使用OpenVINO GenAI API在C++中構建AI應用程序

評論