C++名稱空間特性

文章轉自微信公眾號:Coder梁(ID:Coder_LT)

一、名稱空間特性

1.嵌套

我們可以將名稱空間聲明進行嵌套:

namespace elements {
    namespace fire {
        int flame;
        ...
    }
    float water;
}

我們觀察一下可以發現這裡的flame位於elements::fire當中,所以當我們使用解析運算符使用它的時候寫成:elements::fire::flame。

同樣,我們也可以使用using編譯指令引入fire名稱空間:

using namespace elements::fire;

2.傳遞

並且我們還可以把using編譯指令和using聲明應用在名稱空間當中:

namespace myth {
    using Jill::fetch;
    using namespace elements;
    using std::cout;
    using std::cin;
}

假設我們要訪問Jill::fetch,由於它已經被引入myth當中瞭,所以我們可以這樣訪問:

std::cin >> myth::fetch;

並且using編譯指令是可以傳遞的,A 引入瞭B,B引入瞭C,等價於A也引入瞭C。比如當我們運行using namespace myth;,由於myth當中引入瞭elements,等價於同時運行瞭這兩條:

using namespace myth;
using namespace elements;

3.別名

我們還可以給名稱空間創建別名,例如:

namespace my = myth::elements::fire;
using my::flame;

在上面這個例子當中,我們將別名和名稱空間的嵌套結合在瞭一起使用。其實有一點像是將名稱空間當成是一種特殊變量處理的感覺。

4.匿名名稱空間

我們還可以省略名稱空間的名稱來創建匿名名稱空間。

namespace {
    int ice;
    int bandy;
}

它相當於後面跟著using編譯指令一樣,也就是說匿名的名稱空間的潛在作用域為從聲明點到該聲明區域末尾。從這點來看,它與全局變量相似。但由於它是匿名的,所以無法在其他文件當中使用using關鍵字引入,所以不能在其他文件使用,某種意義上有些類似於鏈接性為內部的靜態變量。

到此這篇關於C++名稱空間特性的文章就介紹到這瞭,更多相關C++名稱空間內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: