close

前幾天去面試被問到這個東西

因為有點不熟就卡住了,今天來複習一下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

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 頁頁頁六滴 的頭像
    頁頁頁六滴

    人森很精彩,所以要把所有事情都記起來=ˇ=

    頁頁頁六滴 發表在 痞客邦 留言(0) 人氣()