C++空間命名的使用
前言
提示:由于C++是在C語(yǔ)言基礎(chǔ)之上,增加了很多新的東西。
本文講解命名空間的具體使用方法
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、命名空間
定義:在C/C++中,變量、函數(shù)和后面要學(xué)到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存 在于全局作用域中,可能會(huì)導(dǎo)致很多沖突。使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化, 以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的。
代碼如下:
#include <stdio.h> #include <stdlib.h> int rand = 10; int main() { printf("%d",rand); return 0; }
然后報(bào)錯(cuò)為:
二、命名空間定義
定義命名空間,需要使用到namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對(duì){}即可,{} 中即為命名空間的成員。
namespace Morgan//名稱 { //內(nèi)容........ }
1.嵌套性
代碼如下:
正常的嵌套
#include <stdio.h> #include <stdlib.h> namespace mo { int rand = 10; namespace mor { int rand = 90; } } int main() { printf("%d\n", mo::mor::rand); printf("%d\n", mo::rand); return 0; }
結(jié)果
函數(shù)嵌套
#include <stdio.h> #include <stdlib.h> namespace mo { int rand = 10; namespace mor { int pr() { return 1; } int rand = 90; } } int main() { printf("%d\n", mo::mor::pr()); return 0; }
結(jié)果
2.和并性
3. 同一個(gè)工程中允許存在多個(gè)相同名稱的命名空間,編譯器最后會(huì)合成同一個(gè)命名空間中。 ps:一個(gè)工程中的test.h和上面test.cpp中兩個(gè)N1會(huì)被合并成一個(gè)
圖片如下:
二、命名空間的使用
1.加命名空間名稱及作用域限定符
代碼如下:
namespace mo { int a = 10; int b = 20; } } //方法1.:命名空間名稱+作用域限定符 int main() { printf("%d\n", mo::a);//10 return 0; }
2.使用using將命名空間中某個(gè)成員引入
代碼如下:
namespace mo { int a = 10; int b = 20; } } //使用方法2.: using mo::b; int main() { printf("%d\n", mo::a); //10 printf("%d\n", b); //20 return 0; }
3.使用using namespace 命名空間名稱 引入
代碼如下:
namespace mo { int a = 10; int b = 20; } using namespace mo; int main() { printf("%d\n", a); printf("%d\n", b); return 0; }
直接引入空間名稱,就不需要作用域限定符了,命名空間mo的大門完全敞開,想訪問(wèn)哪個(gè)就訪問(wèn)哪個(gè)。
總結(jié)
提示:這里對(duì)文章進(jìn)行總結(jié):
優(yōu)點(diǎn)缺點(diǎn)
1.加命名空間名稱及作用域限定符
優(yōu)點(diǎn):指定作用域,做到最好的隔離方法
缺點(diǎn):如果要使用多次命名空間中的某一個(gè)變量或函數(shù)會(huì)很麻煩
2.使用using將命名空間中某個(gè)成員引入
優(yōu)點(diǎn):如果要使用多次命名空間中的某一個(gè)變量或函數(shù)可以直接引入
using將命名空間剛好為1.與2.的折中方案
3.使用using namespace命名空間名稱 引入
優(yōu)點(diǎn):直接引入空間名稱,就不需要作用域限定符了,命名空間mo的大門完全敞開,想訪問(wèn)哪個(gè)就訪問(wèn)哪個(gè)。
缺點(diǎn):很容易發(fā)生沖突
到此這篇關(guān)于C++空間命名的使用的文章就介紹到這了,更多相關(guān)C++空間命名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
最新C/C++中的new和delete的實(shí)現(xiàn)過(guò)程小結(jié)
這篇文章主要介紹了C/C++中的new和delete的實(shí)現(xiàn)過(guò)程,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06C++ map與set封裝實(shí)現(xiàn)過(guò)程講解
set set是一種關(guān)聯(lián)式容器,下面這篇文章主要給大家介紹了關(guān)于C++中map和set使用的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C++具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03C++中聲明類的class與聲明結(jié)構(gòu)體的struct關(guān)鍵字詳解
這篇文章主要介紹了C++中聲明類的class與聲明結(jié)構(gòu)體的struct關(guān)鍵字,默認(rèn)情況下結(jié)構(gòu)的所有成員均是公有的,而類的所有成員是私有的,需要的朋友可以參考下2016-01-01C++定制刪除器與特殊類設(shè)計(jì)(餓漢和懶漢)
這篇文章主要給大家介紹了關(guān)于C++定制刪除器與特殊類設(shè)計(jì)的相關(guān)資料,使用餓漢模式和懶漢模式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07用c語(yǔ)言實(shí)現(xiàn)一個(gè)電話薄(附完整代碼)
大家好,本篇文章主要講的是用c語(yǔ)言實(shí)現(xiàn)一個(gè)電話?。ǜ酵暾a),感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽2022-01-01C++動(dòng)態(tài)規(guī)劃實(shí)現(xiàn)查找最長(zhǎng)公共子序列
這篇文章主要介紹了C++動(dòng)態(tài)規(guī)劃最長(zhǎng)公共子序列,在動(dòng)態(tài)規(guī)劃中,你要將某個(gè)指標(biāo)最大化。在這個(gè)例子中,你要找出最長(zhǎng)公共子序列2022-06-06