C++之命名空间
為什么要使用命名空間?
一個(gè)中大型軟件往往由多名程序員共同開發(fā),會(huì)使用大量的變量和函數(shù),不可避免地會(huì)出現(xiàn)變量或函數(shù)的命名沖突。當(dāng)所有人的代碼都測試通過,沒有問題時(shí),將它們結(jié)合到一起就有可能會(huì)出現(xiàn)命名沖突。
為了解決合作開發(fā)時(shí)的命名沖突問題,C++ 引入了命名空間(Namespace)的概念。
命名空間將全局作用域分成不同的部分不同命名空間中的標(biāo)識(shí)符可以同名而不會(huì)發(fā)生沖突命名空間可以相互嵌套全局作用域也叫默認(rèn)命名空間
對于不帶.h的頭文件,所有的符號都位于命名空間 std 中,使用時(shí)需要聲明命名空間 std;對于帶.h的頭文件,沒有使用任何命名空間,所有符號都位于全局作用域。這也是 C++ 標(biāo)準(zhǔn)所規(guī)定的。
將 std 直接聲明在所有函數(shù)外部,這樣雖然使用方便,但在中大型項(xiàng)目開發(fā)中是不被推薦的,這樣做增加了命名沖突的風(fēng)險(xiǎn),我推薦在函數(shù)內(nèi)部聲明 std。
命名空間的使用實(shí)例:
#include <iostream>// namespace是一個(gè)關(guān)鍵字,用來定義命名空間 namespace NameA {int a;void swap (int* a, int* b){int temp = *a;*a = *b;*b = temp;}namespace NameAA{};struct A{}; };int a;int main2_3() {// 對命名空間中單個(gè)元素使用using NameA::swap;int b = 20;int c = 30;swap (&b, &c);a = 40;return 0; }void func() {}// 2、使用 using 關(guān)鍵字 int main2_2() {// 表明使用命名空間NameA中的內(nèi)容// 但凡在這個(gè)聲明之后使用的變量或者函數(shù),只要沒有指明具體的命名空間// 都使用Name A中的內(nèi)容// using 有效范圍時(shí)當(dāng)前的大括號{ }using namespace NameA;NameA::a = 100;// ::前不加名字,代表使用默認(rèn)的命名空間::a = 20;func();printf ("a = %d, %d\n", NameA::a, ::a);int b = 10;int c = 20;// swap 沒有指明命名空間// 但是之前有了usingspace NameA; 而NameA中有swapswap (&b, &c);return 0; }// 命名空間的使用,1、域解析符:: int main2_1() {a = 10; // 全局的aNameA::a = 20; // 使用命名空間Name A中的變量int b = 1;int c = 2;NameA::swap (&b, &c);printf ("b = %d, c = %d\n", b, c);return 0;}總結(jié)
- 上一篇: python locust 能压测数据库
- 下一篇: C++对C的一些加强和变化