1. 程式人生 > >C++語言,名稱空間,namespace關鍵字

C++語言,名稱空間,namespace關鍵字

名稱空間,簡而言之,這是一個“空間”。

出現背景:

因為在C語言中定義了三個層次的作用域:檔案作用域、函式作用域和複合語句。但是在大型的軟體工程中,一個專案由多個人完成,有多個文字檔案,就很有可能出現 同名 變數、函式,在進行呼叫時,編譯器不知道該呼叫哪一個函式,或者使用哪一個變數的值,因此在編譯過程中很可能發生多重定義,或者發現結果出現問題。

定義:

定義名稱空間,需要使用到 namespace 關鍵字,後面跟名稱空間的 名字,然後接一對 {} 即可,{} 中即為名稱空間的成員。

作用:

名稱空間是 ANSI C++ 引入的可以由使用者命名的作用域,用來處理程式中常見的同名衝突

目的:

對識別符號的名稱進行本地化,避免命名衝突或名字汙染,namespace 關鍵字的出現就是針對這種問題。

格式:(可以初始化,也可以不初始化)

(1)普通名稱空間 :可以定義變數、函式

namespace N1
{
	int a=10;
	char b;
	float c;
	int add(int left, int right)
	{
		return left + right;
	}
}

(2)名稱空間可以巢狀

namespace N2
{
	int a = 20;
	char b;
	float c;
	namespace N3
	{
		int a = 30;
		int add(int left, int right)
		{
			return left + right;

		}
	}
}

(3)同一個工程中允許存在多個相同名稱的名稱空間,但請注意此時在相同名稱的不同名稱空間中,要避免出現定義同一變數,不然此時編譯報錯

         原因在於,在相同名稱的名稱空間中,編譯器將此作為同一名稱空間,因此如果相同變數將作為重定義。例如,當兩個相同名稱的名稱空間,在使用時,出現可選變數時,是將此作為一個集合。

因此正確姿勢為:只要避免出現同一變數即可。

namespace N1
{
	int a = 70;
	char b;
	float c;
}
namespace N1
{
	int m = 20;
	int n;
	float ff;
}

使用:

(1) 一般使用:加空間名稱及作用限定符。在使用哪一個變數、函式時,只需說清其範圍,具體格式為  名稱空間名稱::變數/函式名稱 或者 namespace_name::var/function_name

(2)使用using 將名稱空間中成員引入

(3)使用 using namespace 名稱空間名稱引入。如 原始檔中 using namespace std 表明 將 輸入輸出 cout,cin ,edl等引入,可以將此句註釋掉 驗證。

注:

(1)若同時出現全域性變數和名稱空間,使用全域性變數(函式)時,用 ::全域性變數(函式)名 使用