C++空間命名的使用
前言
提示:由于C++是在C語言基礎之上,增加了很多新的東西。
本文講解命名空間的具體使用方法
提示:以下是本篇文章正文內容,下面案例可供參考
一、命名空間
定義:在C/C++中,變量、函數(shù)和后面要學到的類都是大量存在的,這些變量、函數(shù)和類的名稱將都存 在于全局作用域中,可能會導致很多沖突。使用命名空間的目的是對標識符的名稱進行本地化, 以避免命名沖突或名字污染,namespace關鍵字的出現(xiàn)就是針對這種問題的。
代碼如下:
#include <stdio.h>
#include <stdlib.h>
int rand = 10;
int main()
{
printf("%d",rand);
return 0;
}然后報錯為:

二、命名空間定義
定義命名空間,需要使用到namespace關鍵字,后面跟命名空間的名字,然后接一對{}即可,{} 中即為命名空間的成員。
namespace Morgan//名稱
{
//內容........
}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;
}結果

函數(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;
}結果

2.和并性
3. 同一個工程中允許存在多個相同名稱的命名空間,編譯器最后會合成同一個命名空間中。 ps:一個工程中的test.h和上面test.cpp中兩個N1會被合并成一個
圖片如下:


二、命名空間的使用
1.加命名空間名稱及作用域限定符
代碼如下:
namespace mo {
int a = 10;
int b = 20;
}
}
//方法1.:命名空間名稱+作用域限定符
int main() {
printf("%d\n", mo::a);//10
return 0;
}2.使用using將命名空間中某個成員引入
代碼如下:
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的大門完全敞開,想訪問哪個就訪問哪個。
總結
提示:這里對文章進行總結:
優(yōu)點缺點
1.加命名空間名稱及作用域限定符
優(yōu)點:指定作用域,做到最好的隔離方法
缺點:如果要使用多次命名空間中的某一個變量或函數(shù)會很麻煩
2.使用using將命名空間中某個成員引入
優(yōu)點:如果要使用多次命名空間中的某一個變量或函數(shù)可以直接引入
using將命名空間剛好為1.與2.的折中方案
3.使用using namespace命名空間名稱 引入
優(yōu)點:直接引入空間名稱,就不需要作用域限定符了,命名空間mo的大門完全敞開,想訪問哪個就訪問哪個。
缺點:很容易發(fā)生沖突
到此這篇關于C++空間命名的使用的文章就介紹到這了,更多相關C++空間命名內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
pybind11: C++ 工程提供 Python 接口的實例代碼
這篇文章主要介紹了pybind11: C++ 工程如何提供 Python 接口,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-09-09

