1. 程式人生 > >c++名稱空間 namespace學習

c++名稱空間 namespace學習

我們為什麼需要名稱空間?

我們假設一下這種情況,在A班中,有一名同學叫周磊,在B班中,也有一名同學叫周磊,現在兩個班的同學一起聚會,老師找A班的周磊,這時候他在人群中喊一聲周磊肯定兩個周磊都過來了,這個時候B班周磊就白跑一趟了,為了避免這種尷尬,老師只要喊“A班的周磊過來一下就行了”。在c++已經其他某些語言中,也是這個道理,在很多大型專案中,由於可能多人一起開發,難免出現相同名字的變數,這個時候我們就需要namespace了,在呼叫同名變數時,另外加上它的namespace,這樣就避免了出錯。

1.名稱空間例項

//namespace study
#include<iostream>
using namespace std;
namespace first_space{
	void func(){
		cout<<"my first_space"<<endl;
	}
}
namespace second_space{
	void func(){
		cout<<"my second_space"<<endl;
	}
}
int main(){
	first_space::func();
	second_space::func();
}

2.using指令

您可以使用 using namespace 指令,這樣在使用名稱空間時就可以不用在前面加上名稱空間的名稱。這個指令會告訴編譯器,後續的程式碼將使用指定的名稱空間中的名稱。

//namespace study
#include<iostream>
using namespace std;
namespace using_space{
	void beusing(){
		cout<<"I am using"<<endl;
	}
}
using namespace using_space;

//namespace using_space{
//	void beusing(){
//		cout<<"I am using"<<endl;
//	}
//}
int main(){
	beusing();

}

這裡注意using namespace必須在被呼叫空間定義後再使用。

using 指令也可以用來指定名稱空間中的特定專案。例如,如果您只打算使用 std 名稱空間中的 cout 部分,您可以使用如下的語句:

#include <iostream>
using std::cout;
 
int main ()
{
 
   cout << "std::endl is used with std!" << std::endl;
   
   return 0;
}

3.不連續的名稱空間

名稱空間可以定義在幾個不同的部分中,因此名稱空間是由幾個單獨定義的部分組成的。一個名稱空間的各個組成部分可以分散在多個檔案中。

所以,如果名稱空間中的某個組成部分需要請求定義在另一個檔案中的名稱,則仍然需要宣告該名稱。下面的名稱空間定義可以是定義一個新的名稱空間,也可以是為已有的名稱空間增加新的元素:

namespace namespace_name {
   // 程式碼宣告
}

4.巢狀的名稱空間

在c++中,名稱空間的使用是可以巢狀的。如下所示:

namespace namespace_name1 {
   // 程式碼宣告
   namespace namespace_name2 {
      // 程式碼宣告
   }
}

注意,引用父級名稱空間並不能直接呼叫子空間裡的變數,如下:

#include<iostream>
using namespace std;
namespace first_space{
	namespace second_space{
		int a=0,b=1;
	}
}
using namespace first_space;
int main(){
	cout<<a<<" "<<b<<endl; //錯誤程式碼,a未定義
	return 0;
}

正確呼叫方式如下:

#include<iostream>
using namespace std;
namespace first_space{
	namespace second_space{
		int a=0,b=1;
	}
}
using namespace first_space::second_space;
int main(){
	cout<<a<<" "<<b<<endl;
	return 0;
}