1. 程式人生 > 其它 >C++中名稱空間與 using的作用

C++中名稱空間與 using的作用

技術標籤:C++c++

文章目錄

名稱空間是什麼

為了讓編寫大程式以及多個廠商現有程式碼組合起來更方便,比如有

  1. A廠寫的程式碼裡面包含了一個函式wanda()
  2. B廠寫的程式碼裡面也包含了一個函式wanda()

此時如果你想把A B兩個廠商的程式碼組合起來,就有可能會發生函式名字衝突這樣的事情。

而名稱空間能讓廠商把其產品封裝在一個叫做名稱空間的單元中,這樣就可以使用名稱空間來指出想用哪個廠商的產品。

比如使用A公司的wanda()函式可以這樣寫

A:wanda();

使用B公司的wanda()函式可以這樣寫

B::wanda();

using的使用

看到上面可能就會有同學問,每一次都在前面加一個名稱空間,那不是很繁瑣嘛,所以為了解決這一問題,就誕生了using這一關鍵字。

比如你使用

using namesapce A;
wanda(); 

表達的意思就和

A::wanda();

是一樣的,就是你使用了using namesapce A這一語句以後,你以後使用的函式都預設是A公司的函式。

using namesapce std;的解釋

我們在開始學習C++的時候都會遇到一個問題,這一句using namespace std;到底是幹什麼用的,有了上面的知識以後我們知道,他的意思就是後面用的函式都是std這個名稱空間(公司)

的函式,那麼std又是什麼呢?
C++的標準組件,都被放在了std這一名稱空間裡面了,所以如果你想使用C++的標準組件你就需要從這個名稱空間中呼叫函式。

但是該方法也有缺陷,比如下面的程式碼

/*A空間包含的兩個函式test1() test2()*/
test1();
test2();
/*B空間包含的兩個函式test1() test2()*/
test1();
test2();

如果我們想呼叫A空間的中test1()和B空間中的test2()那麼我如果使用上面的方法來寫程式碼的話會是下面這樣

using namespace A;
test1();
using namespace B;
test2
();

這會很不方便,特別是當名稱空間很多的時候,而且特別容易出錯,因為你沒辦法在開頭的時候就寫好,要使用哪一些名稱空間,因為每個名稱空間空間都有作用域的,使用using namespace x;後,後面的函式都會預設從x裡面出來,這就需要我們一邊寫程式碼還要一邊寫using namespace x;很容易出錯。所以我們很多時候會用下面這樣的方式來寫

using A::test1();
using B::test2();
test1();//預設使用的是A中的test1
test2();//預設使用的是B中的test2