前幾天去面試被問到這個東西
因為有點不熟就卡住了,今天來複習一下XD
其實這個網站寫得很清楚:https://openhome.cc/Gossip/CppGossip/Namespace.html
我只是額外紀錄而已
為什麼要有這個東西呢
主要是因為可能會出現一些變數名稱、函式名稱等等會重複的情況,必須要有一個制度去區分
就像你今天在某處定義了一個代表2D的點叫做Point,在另一處又定義了一個代表3D的點也叫做Point
然後你要在同一個地方使用,但因為都叫做Point,所以會出現重複定義的問題
除了直接把他們改名之外(當然是不太好吧),這時就可以用namespace來區分這兩種Point
使用的方式大概是這樣:
namespace 名稱 {
// 各種宣告,類別啊,變數啊,函式啊
}
比如說剛剛上面那個例子:
namespace 2D {
class Point {
// 一些member...
}
}
namespace 3D {
class Point {
// 一些member...
}
}
使用的時候就這樣:
2D::Point pt;
3D::Point pt2;
就是在名稱面前加上namespace的名稱,這樣編譯器就他要去哪裡找那個叫做Point的東西了
那如果沒必要寫所以不想寫namespace,C++也有提供using這種東西:
using 命名空間名稱::成員名稱
using namespace 命名空間名稱
比如說一般常常看到的using namespace std;
因為C++裡面提供的那些標準函式庫都是在std這個命名空間裡的,有時候為了方便會在一開始加上這行,這樣就不用一直寫std::了
另外也有一種沒有名稱的namespace,就是我去面試被問到的
當時我根本忘記有這種用法,所以直接爆炸了XD
就像底下這樣:
namespace {
// 變數,函式,類別等等
}
這樣代表什麼呢
這裡面宣告的名稱就只限於這個檔案裡可以使用,其他檔案中都無法使用
就是一個限定使用的概念
好吧,這篇就這樣了
算是一個比較基本的概念,要好好掌握啊XD