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

Spire.XLS for C++組件說(shuō)明

EE-112:模擬C++中的類實(shí)現(xiàn)

AKI跨語(yǔ)言調(diào)用庫(kù)神助攻C/C++代碼遷移至HarmonyOS NEXT
C7000 C/C++優(yōu)化指南用戶手冊(cè)

TMS320C6000優(yōu)化C/C++編譯器v8.3.x

C語(yǔ)言和C++中結(jié)構(gòu)體的區(qū)別
C7000優(yōu)化C/C++編譯器

使用OpenVINO GenAI API在C++中構(gòu)建AI應(yīng)用程序

評(píng)論