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