摘要:提出了一個(gè)新語(yǔ)法命名空間命名空間的定義對(duì)于上面的問(wèn)題我們使用命名空間來(lái)解決我們使用來(lái)劃定一個(gè)區(qū)域,叫做域,域的名字叫名字可以自己定義,但是最好不要跟庫(kù)已有的重復(fù)。
#include int rand = 0;int main(){ printf("%d", rand); return 0;}
上述代碼一定會(huì)出現(xiàn)以下情況:
原因: 自己定義的rand變量為某一庫(kù)函數(shù)里面已經(jīng)聲明過(guò)的函數(shù),意思就是你自己定義的東西跟庫(kù)函數(shù)的東西重復(fù)了。這種錯(cuò)誤就是命名沖突。
命名沖突問(wèn)題:
對(duì)于上面的問(wèn)題我們使用命名空間來(lái)解決:
#include namespace zzy{ int rand = 0;}int main(){ printf("%d", zzy::rand); return 0;}
我們使用namespace來(lái)劃定一個(gè)區(qū)域,叫做域,域的名字叫zzy(名字可以自己定義,但是最好不要跟庫(kù)已有的重復(fù))。這個(gè)域就像是隱身衣一樣,讓系統(tǒng)編譯的時(shí)候不會(huì)去這個(gè)區(qū)域里面讀取。
:: 為域作用限定符,前面是命名空間的名稱,后面是命名空間里的變量、類型、函數(shù)等。使用這個(gè)限定符來(lái)指定我們使用的是哪個(gè)命名空間里的變量
需要注意的一點(diǎn)是,命名空間是全局的,必須要寫(xiě)在main函數(shù)的外邊。
下面舉些例子來(lái)幫大家更清晰的了解命名空間:
1. 函數(shù)定義在命名空間里
#include namespace zzy{ int Add(int x, int y) { return x + y; }}int main(){ printf("%d/n", zzy::Add(1, 2)); return 0;}
如果把函數(shù)的定義寫(xiě)在命名空間的外面,而函數(shù)聲明在命名空間里面會(huì)怎么樣?由于命名空間會(huì)屏蔽掉,相當(dāng)于你沒(méi)有寫(xiě)這個(gè)聲明。但是如果你的函數(shù)定義寫(xiě)在main函數(shù)的上面就沒(méi)什么問(wèn)題了。
#include namespace zzy{ int Add(int x, int y);}int Add(int x,int y){ return x+y;}int main(){ printf("%d/n",/*zzy::*/Add(1, 2)); return 0;}
一點(diǎn)要注意,這個(gè)時(shí)候你不可以寫(xiě)zzy::了,因?yàn)槿绻氵@么寫(xiě)的話系統(tǒng)會(huì)優(yōu)先去zzy命名空間里去尋找,發(fā)現(xiàn)只有函數(shù)的聲明,沒(méi)有函數(shù)的定義,所以是沒(méi)結(jié)果的。
2.對(duì)全局變量使用命名空間
#include int a = 0;int main(){ int a = 10; printf("%d",::a);//使用全局作用域的a,::前面的沒(méi)有東西代表全局作用域}
3.命名空間的嵌套
#include namespace zzy{ int a = 10; namespace N1 { int b = 20; }}int main(){ printf("%d/n",zzy::a); printf("%d/n",zzy::N1::b);}
4.using命名空間
我們發(fā)現(xiàn),每次使用一些命名空間里的變量總是要加上”命名空間名稱::”,當(dāng)變量多時(shí),就會(huì)顯得很繁瑣。所以我們可以這么做:
#include using namespace zzy{ int count = 12; int Add(int x,int y) { return x+y; }}//解放了整個(gè)zzy空間,使里面的變量等變得不隱身了using namespace zzy;int main(){ printf("%d",count); printf("%d",Add(1,2));}
也可以解放一部分變量、函數(shù)等:
#include using namespace zzy{ int count = 12; void B() { int cur = 0; }}//只解放了一部分變量using zzy::B::cur;int main(){ printf("%d",zzy::count); printf("%d",cur);}
5.命名空間里的結(jié)構(gòu)體
#include using namespace zzy{ int count = 0; struct Node { int val = 0; };}int main(){ struct zzy::Node node;//注意::的位置,我們要找的是Node node.val = 12; printf("%d/n", node.val);}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/125069.html
摘要:使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的。缺省參數(shù)概念缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。 ...
摘要:據(jù)我了解,很多學(xué)校在學(xué)習(xí)的時(shí)候,老師會(huì)讓學(xué)生死記一條語(yǔ)句,那就是那么你真的了解它嗎命名空間是一個(gè)命名空間。如果我們真的想使用的話,的命名空間遍給了我們解決方法使用命名空間。 據(jù)我了解,很多學(xué)校在學(xué)習(xí)c++的時(shí)候,老師會(huì)讓學(xué)生死記一條語(yǔ)句,那就是 using?namespace?std; 那么...
摘要:事實(shí)上語(yǔ)言當(dāng)中有的內(nèi)容,比如函數(shù)循環(huán)結(jié)構(gòu)體宏等等內(nèi)容,也都有,所以大家千萬(wàn)不要認(rèn)為語(yǔ)言白學(xué)了哈因?yàn)橹耙呀?jīng)完整更新過(guò)語(yǔ)言的博客有需要可以往前翻,所以這里直接介紹相對(duì)語(yǔ)言當(dāng)中新增的內(nèi)容,而本章引入的內(nèi)容是的關(guān)鍵字命名空間缺省參數(shù)函數(shù)重載。 ...
摘要:從到之命名空間入門命名空間命名空間定義命名空間的使用輸入輸出入門命名空間在中,變量函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量函數(shù)和類的名稱將都存在于全局作用域中,可能會(huì)導(dǎo)致很多沖突。 ...
摘要:使用輸入輸出更方便,不需增加數(shù)據(jù)格式控制,比如整形,字符等缺省參數(shù)備胎缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值。此外,函數(shù)重載要求參數(shù)不同,而跟返回值沒(méi)關(guān)系。 ...
閱讀 3457·2021-11-25 09:43
閱讀 2604·2021-09-22 15:54
閱讀 590·2019-08-30 15:55
閱讀 973·2019-08-30 15:55
閱讀 1997·2019-08-30 15:55
閱讀 1740·2019-08-30 15:53
閱讀 3464·2019-08-30 15:52
閱讀 2039·2019-08-30 12:55