2-1:C++快速入门之命名空间
文章目錄
- 一:C++關(guān)鍵字
- 二:命名空間
- (1)命名空間的作用
- (2)命名空間的定義
- A:命名空間的定義
- B:注意事項(xiàng)
- (3)命名空間的使用
一:C++關(guān)鍵字
為什么先要說(shuō)關(guān)鍵字呢,因?yàn)樵谝欢ǔ潭壬?#xff0c;關(guān)鍵字可以反映一門編程語(yǔ)言語(yǔ)法的大致特點(diǎn)
C語(yǔ)言共計(jì)32個(gè)關(guān)鍵字,C++共計(jì)63個(gè)關(guān)鍵字
- C語(yǔ)言相關(guān)關(guān)鍵字的精講:【C語(yǔ)言重點(diǎn)難點(diǎn)精講】關(guān)鍵字精講
二:命名空間
一項(xiàng)工程,需要你和小王一起完成,你們兩個(gè)在各自編寫的模塊中都編寫了一個(gè)相同名字的接口(函數(shù)),等到代碼合并時(shí),卻出現(xiàn)了錯(cuò)誤,原因可想而知——C/C++中,變量,函數(shù)以及類會(huì)作用于全局域中,相同的名字導(dǎo)致了命名沖突或名字污染
C語(yǔ)言中并不能有效的解決這樣的問(wèn)題,比如,我們都知道scanf函數(shù)是C語(yǔ)言的標(biāo)準(zhǔn)輸入輸出函數(shù),但是在下面的這個(gè)例子中,定義了一個(gè)名字叫做scanf的變量,這顯然是不可取的,但是這段代碼卻在運(yùn)行時(shí)才報(bào)錯(cuò)最后肯定是無(wú)法輸出的,因?yàn)楫a(chǎn)生了歧義。在編譯中首先展開(kāi)了stdio.h頭文件,scanf函數(shù)就在其中(函數(shù)名就是函數(shù)的首地址),所以執(zhí)行到這一步,編譯器不知道這里應(yīng)該是要輸出這個(gè)函數(shù)的地址還是要輸出你定義的那個(gè)變量。
- 上圖中顯示的是該函數(shù)的地址
當(dāng)然這些問(wèn)題在C++中卻很容易解決——命名空間
(1)命名空間的作用
C/C++中,變量、類的名稱將存在于全局作用域中,重復(fù)的名字或其他問(wèn)題將導(dǎo)致一些不可預(yù)見(jiàn)的錯(cuò)誤。命名空間可以有效的解決這個(gè)問(wèn)題,使用命名空間目的在于將標(biāo)識(shí)符的名稱本地化,以免沖突。
簡(jiǎn)單點(diǎn)來(lái)說(shuō),把名字關(guān)進(jìn)“小黑屋”,你的變量名字和我的變量名字即便是一樣的,但是本質(zhì)是不一樣的,使用時(shí)按照一定方式打開(kāi)“小黑屋”
(2)命名空間的定義
A:命名空間的定義
定義命名空間時(shí),要使用namespace關(guān)鍵字,其后緊接該命名空間的名字,然后寫上“{}”,括號(hào)內(nèi)即是該命名空間的成員。有點(diǎn)像結(jié)構(gòu)體。
namespace N1//將改命名空間定義為“N1” {int a;//可以存放變量void swap(int* a,int*b)//可以存放函數(shù){int temp=*a;*a=*b;*b=temp;} }當(dāng)然命名空間也是可以嵌套的
namespace N2 {int a;namespace N3{void swap(int* a,int*b){int temp=*a;*a=*b;*b=temp;}} }同一個(gè)工程文件允許存在多個(gè)相同名稱的命名空間,編譯器最后會(huì)將其合并到同一個(gè)命名空間中
B:注意事項(xiàng)
定義好命名空間,就相當(dāng)于定義了一個(gè)新的作用域(“小黑屋”),命名空間中的所有內(nèi)容都局限于該命名空間,除非使用時(shí)進(jìn)行釋放(打開(kāi)“小黑屋”)。
如下,對(duì)于上面的那個(gè)例子中,如果定義命名空間,將不會(huì)出現(xiàn)錯(cuò)誤:
(3)命名空間的使用
命名空間的使用主要有三種方法,各有優(yōu)缺點(diǎn)
1. 命名空間名稱和作用域限制符
2. 使用using將成員導(dǎo)入
3.暴力導(dǎo)入
來(lái)看看在C++中輸出Hello World
其余部分可以暫時(shí)不用管,其中的using namespace std的作用就是將相關(guān)命名空間導(dǎo)入,那么自然而然還會(huì)其他常見(jiàn)的寫法
#include <iostream>int main() {std::cout << "Hello World\n" << std::endl;return 0; }總的來(lái)說(shuō),日常練習(xí)時(shí),為了方便,可以使用第三種暴力導(dǎo)入,但是在實(shí)際開(kāi)發(fā)中,應(yīng)當(dāng)使用第一種和第二種,如果某個(gè)變量使用的較多的話,就使用第二種預(yù)先將這個(gè)變量名導(dǎo)入
總結(jié)
以上是生活随笔為你收集整理的2-1:C++快速入门之命名空间的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: BZOJ 2282 树的直径
- 下一篇: iOS9 HTTPS