這是一篇譯文原文地址
有時(shí)你的代碼中可能會(huì)有一個(gè)叫做xyz()
的函數(shù)上祈,而另一個(gè)庫(kù)中也有一個(gè)相同的xyz()函數(shù)苔可。此時(shí)編譯器無(wú)法確定你使用的是哪一個(gè)版本的xyz()
命名空間用來(lái)克服這個(gè)困難并且它作為額外信息來(lái)區(qū)分不同庫(kù)中的相同名字糖驴,比如相同的函數(shù)名蜘欲,類(lèi)名章姓,變量等啥刻。使用命名空間你可以定義參數(shù)在哪個(gè)命名中被定義秃殉。本質(zhì)上一個(gè)命名空間定義了一個(gè)范圍坝初。
- 定義一個(gè)命名空間
命名空間以namespace
開(kāi)始,后面緊跟著命名空間的名字复濒,如下所示
namespace namespace_name{
// code declarations
}
- 調(diào)用命名空間中使能的函數(shù)或者變量脖卖,如下所示應(yīng)該先考慮命名空間的名字
#include <iostream>
using namespace std;//下面再解釋這個(gè)用法
// first name space
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
int main () {
// Calls function from first name space.
first_space::func();
// Calls function from second name space.
second_space::func();
// Calls variable from first name space.
cout << first_space::space << endl;
// Calls variable from second name space.
cout << second_space::space << endl;
return 0;
}
- 使用指令
你也可以通過(guò)直接使用using namespace
來(lái)避免每次調(diào)用都要加上命名空間。這個(gè)指令告訴編譯器隨后的代碼使用指定命名空間中的命名巧颈,此時(shí)如下所示
// first name space
namespace first_space{
int space = 1;
void func(){
cout << "Inside first_space" << endl;
}
}
// second name space
namespace second_space{
int space = 2;
void func(){
cout << "Inside second_space" << endl;
}
}
using namespace first_space;
int main () {
// Calls function from specified name space.
func();
return 0;
}
使用指令也可以用來(lái)指定命名空間中特殊的項(xiàng)畦木,例如std namespace
中你只想使用cout
你可以這樣指定它:using std::cout
隨后的代碼不用再加上命名空間就可以指定cout
,但是std中的其它項(xiàng)還是需要明顯的加上std命名空間
#include <iostream>
using std::cout;
int main () {
cout << "std::endl is used with std!" << std::endl;
return 0;
}
- 不連續(xù)的命名空間定義
一個(gè)命名空間可以被定義在不同的地方,因此一個(gè)命名空間是分開(kāi)定義地方的總和砸泛,分開(kāi)的部分可以在不同的文件中十籍。
如果命名空間的一部分需要使用在另一個(gè)文件定義的一個(gè)名字,這個(gè)名字也需要被聲明唇礁,寫(xiě)一個(gè)下面的命名空間勾栗,要么定義一個(gè)新的命名空間要么在已有中增加元素
namespace namespace_name {
// code declarations
}
- 嵌套命名空間
命名空間是可以嵌套的,你可以在一個(gè)命名空間中定義另一個(gè)命名空間
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
}
}
你可以使用結(jié)果操作符來(lái)獲得嵌套的命名空間
// to access members of namespace_name2
using namespace namespace_name1::namespace_name2;
// to access members of namespace:name1
using namespace namespace_name1;
在以上語(yǔ)句中當(dāng)你使用namespace_name1盏筐,namespace_name2中的元素也可以使用
#include <iostream>
using namespace std;
// first name space
namespace first_space{
void func(){
cout << "Inside first_space" << endl;
}
// second name space
namespace second_space{
void func(){
cout << "Inside second_space" << endl;
}
}
}
using namespace first_space::second_space;
int main () {
// This calls function from second name space.
func();
return 0;
}