C++命名空間 namespace詳解
一、命名空間的定義
定義命名空間,使用namespace關(guān)鍵字,后面跟命名空間的名字,然后接一對(duì)花括號(hào){ } 即可,{ }中即為命名空間的成員。
1.一般定義
namespace test
{
int a = 10;
int b = 100;
int ADD(int x, int y)
{
return x + y;
}
}2.嵌套定義
namespace test
{
int a = 10;
int b = 100;
int Add(int x, int y)
{
return x + y;
}
namespace test2
{
int c(99);
int d(9);
//c++可以使用括號(hào)來(lái)進(jìn)行列表初始化
int Sub(int x, int y)
{
return x - y;
}
}
}3.重名定義
同一個(gè)工程中允許存在多個(gè)相同名稱的命名空間,編譯器最后會(huì)合成同一個(gè)命名空間中。
例如:
namespace N1 //N1是命名空間的名稱
{
//用花括號(hào){ }將命名空間的內(nèi)容包起來(lái)
//命名空間的內(nèi)容,即可以定義變量,也可以定義函數(shù)
int a;
int Add(int x, int y)
{
return x + y;
}
}
namespace N1 //再次定義命名空間 N1
{
int Mul(int x, int y)
{
return x * y;
}
}實(shí)際上等同于:
namespace N1 //N1是命名空間的名稱
{
//用花括號(hào){ }將命名空間的內(nèi)容包起來(lái)
//命名空間的內(nèi)容,即可以定義變量,也可以定義函數(shù)
int a;
int Add(int x, int y)
{
return x + y;
}
int Mul(int x, int y)
{
return x * y;
}
}二、命名空間的使用
C++為了防止命名沖突,把自己庫(kù)里面的東西都定義在一個(gè)std的命名空間中要使用標(biāo)準(zhǔn)庫(kù)里面的東西,有三種方式:
- 加命名空間的名稱及作用域限定符。
- 使用using引入命名空間的成員。
- 使用using namespace 命名空間名稱引入,將所有名稱全展開(kāi)。
1.命名空間的名稱及作用域限定符
代碼如下:
namespace test
{
int a = 10;
int b = 100;
int Add(int x, int y)
{
return x + y;
}
namespace test2
{
int c(99);
//c++可以使用括號(hào)來(lái)進(jìn)行初始化
int d(9);
int Sub(int x, int y)
{
return x - y;
}
}
}
int main()
{
std::cout << test::Add(test::a, test::b) << std::endl;
std::cout << test::test2::Sub(test::test2::c, test::test2::d) << std::endl;
return 0;
}指定命名空間–麻煩,每個(gè)地方都要指定,但也是最規(guī)范的方式。
2.使用using namespace 命名空間全展開(kāi)
代碼如下:
using namespace std;
把std整個(gè)展開(kāi),相當(dāng)于庫(kù)里面的東西全部到全局域里面去了,使用起來(lái)方便但是可能會(huì)有與自己命名空間定義的沖突,規(guī)范工程中不推薦這種,日常練習(xí)可以用這種。
3.使用using引入命名空間的成員
代碼如下:
int c = 100;
namespace N
{
int a = 10;
int b = 20;
int Add(int left, int right)
{
return left + right;
}
int Sub(int left, int right)
{
return left - right;
}
}
using std::cout;
using std::endl;
int main()
{
printf("%d\n", N::a);
printf("%d\n", N::b);
printf("%d\n", N::Add(1, 2));
printf("%d\n", N::Sub(1, 2));
int c = 10;
printf("%d\n", c); //局部變量?jī)?yōu)先,所以c為10
printf("%d\n", ::c); //指定訪問(wèn)左邊域,空白表示全局域
}對(duì)部分常用的庫(kù)里面的東西展開(kāi)->針對(duì)1和2的折中方案,項(xiàng)目中也經(jīng)常使用。
到此這篇關(guān)于C++命名空間 namespace的文章就介紹到這了,更多相關(guān)命名空間 namespace內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python擴(kuò)展C/C++庫(kù)的方法(C轉(zhuǎn)換為Python)
這篇文章主要介紹了Python擴(kuò)展C/C++庫(kù)的方法(C轉(zhuǎn)換為Python),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-10-10
C語(yǔ)言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)超市信息管理系統(tǒng)課程設(shè)計(jì),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù)
這篇文章主要介紹了詳解VS2019 dumpbin查看DLL的導(dǎo)出函數(shù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Flutter應(yīng)用Windows平臺(tái)接入實(shí)踐詳解
這篇文章主要為大家介紹了Flutter應(yīng)用Windows平臺(tái)接入實(shí)踐詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02

