命名空間域是隨標(biāo)準(zhǔn)C++而引入的。它相當(dāng)于一個(gè)更加靈活的文件域(全局域),可以用花括號(hào)把文件的一部分括起來,并以關(guān)鍵字namespace開頭給它起一個(gè)名字:
namespace name1{ int a = 0; }說到這里,相信你一定會(huì)想到std這個(gè)命名空間。
沒錯(cuò),標(biāo)準(zhǔn)C++庫中的所有組件都是在一個(gè)被稱為std的名字空間中聲明和定義的。
**命名空間的幾種玩法...**
NO.1 兩種訪問方式
要在采用標(biāo)準(zhǔn)C++的平臺(tái)上使用標(biāo)準(zhǔn)C++庫中的組件,有兩種方式:
1.寫一個(gè)using指示符:using namespace std; 直接使用標(biāo)準(zhǔn)C++庫中的所有成員。
2.用std::成員 的方式使用C++庫里的成員。(::是作用域解析符)
![]()
在這里,我們只需要了解有這兩種方式即可。為了程序的簡(jiǎn)潔性和可讀性,編寫程序時(shí)普遍采用第一種方式。當(dāng)然,在同一段程序中,這兩種方式可以同時(shí)使用。
NO.2 解決變量命名沖突的問題
我們來看這樣一個(gè)例子:
#include<iostream>using namespace std;namespace name1{ int value = 1;//name1域內(nèi)對(duì)象}namespace name2{ int value = 2;//name2域內(nèi)對(duì)象}int value = 3;//全局變量int main(){ int value = 4;//局部變量 cout << name1::value << endl; cout << name2::value << endl; cout << value << endl; getchar(); return 0;}在這段程序中,有兩個(gè)域的域內(nèi)變量和全局、局部變量。程序執(zhí)行結(jié)果為:
由上圖可以看出:
1.加上域作用限定符可以訪問不同域中的成員變量,且變量名可以相同。
2.重名的全局和局部變量,編譯器優(yōu)先訪問局部變量,為了印證這一點(diǎn),在屏蔽掉局部變量后,程序執(zhí)行結(jié)果如下:
另外,如果不想用::限定符來訪問自己定義的命名空間,也可以在main函數(shù)前使用“using namespace +命名空間名”的方式來訪問。
NO.3 命名空間的嵌套定義
除了單獨(dú)使用外,命名空間還可以進(jìn)行嵌套定義,例如:
#include<iostream>using namespace std;namespace name1{ namespace name2 { int value = 1; } int value = 2; }int main(){ cout << name1::value << endl; cout << name1::name2::value << endl; getchar(); return 0;}程序執(zhí)行結(jié)果大家已經(jīng)猜到了,沒錯(cuò),就是2和1。** 一點(diǎn)題外話。。。**
這個(gè)程序:
#include<iostream.h>using namespace std;int main(){ cout << "Hello World" << endl; getchar(); return 0}不會(huì)編譯通過,是因?yàn)?include<iostream.h>是C++比較老的庫, 而vc6.0仍然支持這個(gè)頭文件 ,但新的編譯器(如vs2008及以上)都不再支持,所以建議使用新庫的頭文件#include<iostream>。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注