對于一個存在着标準輸入輸出的C++控制台程式,一般會在#include <iostream>的下一行發現一句話,using namespace std。這句話其實就表示了所有的标準庫函數都在标準命名空間std中進行了定義。其作用就在于避免發生重命名的問題。
1. 關于namespace
C++引入了命名空間namespace主要解決了多個程式員在編寫同一個項目中可能出現的函數等重名的現象。解決方法就是加上自己的命名空間。比如下面的例子:
#include <iostream>
using namespace std;
namespace ZhangSan
{
int a=10; //張三把10指派給了變量a
}
namespace LiSi
{
int a=5; //李四把10指派給了變量a
}
void main()
{
int a=1;
cout<<"張三定義的a="<<ZhangSan::a<<endl;
cout<<"李四定義的a="<<LiSi::a<<endl;
cout<<"主函數定義的a="<<a<<endl;
}
上例中的“ZhangSan::a”和“LiSi::a”分别表示了調用張三命名空間中的a變量和李四命名空間中的a變量。這樣的好處顯而易見,那就是雖然張三和李四這兩個程式員都定義了一個變量a,但是并不會出現重名的危險。
運作結果為:
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5iM3ETM4MDOkJzYwQWM1MmZyYzX0IjNyATM3EzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
2. 關于using namespace *
顧名思義,using namespace * 就表示釋放命名空間* 中間的東西。好處在于我們在程式裡面就不用在每個函數的頭上都加上*::來調用。比如說如果上面那個程式,如果我們不在using namespace std,那麼我們就需要在主函數中的标準輸出流cout函數前面加上std,寫成
std::cout
表示調用std空間裡面的标準輸出流cout。但是有些時候我們也不能圖這個友善,比如說如果在主函數中将命名空間ZhangSan和LiSi的中所定義的變量釋放出來,如下例1:
#include <iostream>
using namespace std;
namespace ZhangSan
{
int a=10; //張三把10指派給了變量a
}
namespace LiSi
{
int a=5; //李四把10指派給了變量a
}
void main()
{
int a=1;
using namespace ZhangSan;
using namespace LiSi;
cout<<a<<endl;
}
這個程式輸出結果為:
如果我們在主函數中把 int a=1給删除,如下例2:
#include <iostream>
using namespace std;
namespace ZhangSan
{
int a=10; //張三把10指派給了變量a
}
namespace LiSi
{
int a=5; //李四把10指派給了變量a
}
void main()
{
using namespace ZhangSan;
using namespace LiSi;
cout<<a<<endl;
}