最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 名稱空間詳情

 更新時(shí)間:2021年09月24日 14:44:02   作者:用戶982433096214  
當(dāng)一個(gè)項(xiàng)目變得大型之后,我們會(huì)引入很多的庫,這么一來兩個(gè)庫很可能會(huì)定義List、Tree、Node同名的類,編譯器要是不考慮這情況的話,程序員調(diào)用時(shí)就會(huì)出現(xiàn)沖突問題。C++提供了名稱空間工具,以更好的控制名稱的作用域,本文就來談?wù)凜++ 名稱空間,需要的朋友可以參考一下

一、傳統(tǒng)的C++命名空間

聲明區(qū)域(declaration region): 聲明區(qū)域是可以在其中進(jìn)行聲明的區(qū)域。例如,可以在函數(shù)外面聲明全局變量,對(duì)于這種變量,那么它的聲明區(qū)域?yàn)槠渎暶魉诘奈募?。?duì)于在函數(shù)中聲明的變量,聲明區(qū)域?yàn)槠渎暶魉诘拇a塊。
潛在作用域(potential scope): 變量的潛在作用域從聲明點(diǎn)開始,到其聲明區(qū)域的結(jié)尾。因此潛在作用域比聲明區(qū)域小,這是由于變量在定義之后才能使用。

二、新的命名空間特性

C++包含了一種功能,即通過定義一種新的聲明區(qū)域來創(chuàng)建命名的名稱空間,這樣做的目的之一是提供一個(gè)聲明名稱的區(qū)域。一個(gè)名稱空間中的名稱不會(huì)與另外一個(gè)名稱空間的相同名稱發(fā)生沖突,同時(shí)允許程序其他部分使用該名稱空間中聲明的東西。 例如,使用關(guān)鍵字namespace創(chuàng)建兩個(gè)名稱空間:

namespace Jack {
    double pail;                           // variable declaration
    void fetch();                          // function prototype
    int pal;                               // variable declaration
    struct Well {...}                      // structure declaration
}

namespace Jill {
    double bucket(double n) {...};         // variable declaration
    double fetch;                          // variable declaration
    int pal;                               // variable declaration
    struct Hill {...}                      // structure declaration
}

名稱空間是開放的(open),即可以把名稱加到已有的名稱空間中。例如,下面這條語句將名稱goose添加到Jill中已有的名稱列表中:

namespace Jill {
    char* goose(const char*);
}

同樣,原來的Jack名稱空間為fech()函數(shù)提供了原型。可以在該文件后面(或者另一個(gè)文件中)再次使用Jack名稱空間來提供函數(shù)的代碼:

namespace Jack {
    void fetch() {
        ...
    }
}

需要訪問給定名稱空間的名稱時(shí),通過作用域解析運(yùn)算符::,使用名稱空間來限定該名稱。

1.using聲明和using編譯指令

當(dāng)我們不希望每次使用名稱時(shí)都對(duì)它進(jìn)行限定,因此c++提供了兩種機(jī)制(using聲明和using編譯指令)來簡化對(duì)名稱空間中名稱的使用。

using聲明:使特定聲明的標(biāo)識(shí)符可用

namespace Jill {
    double bucket(double n) { ... }
    double fetch;
}
char fetch;

int main() {
    using Jill::fetch     // using declaration
    double fetch;         // Error! Already have a local fetch
    cin >> fetch;         // read a value into Jill::fetch
    cin >> ::fetch;       // read a value into global fetch
}

這段代碼,using聲明將特定的名稱添加到它所屬的聲明區(qū)域中。main()中的using聲明將fetch添加到main()定義的聲明區(qū)域中。完成聲明后,便可以使用名稱fetch代替Jill::fetch。

using編譯指令:使整個(gè)名稱空間可用

using編譯指令使所有的名稱都可用。在全局聲明區(qū)域中使用using編譯指令,將使該名稱空間的名稱全局可用。例如:

#include <iostream>
using namespace std;

 
// 在函數(shù)中使用using編譯指令,將使其中的名稱在函數(shù)中可用
int main() {
    using namespace jack;   // make names available in vorn()
}

不同的命名空間表示不同的內(nèi)存單元,以下情況會(huì)存在二義性問題,使用時(shí)應(yīng)該注意。

using namespace jack
using namespace jill   // 二者空間中都有pal變量

pal = 4;               // which one? now have a conflict

一般來說,使用using聲明比使用using編譯指令更安全,這是由于它只導(dǎo)入指定的名稱。如果該名稱與局部名稱發(fā)生沖突,編譯器會(huì)發(fā)出指示。using編譯指令導(dǎo)入所有名稱,包括一些實(shí)際并不需要的。如果與局部名稱發(fā)生沖突,局部覆蓋名稱空間的版本,而編譯器不會(huì)發(fā)出警告。

2.名稱空間的其他特性

名稱空間可以嵌套

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

訪問flame指的是elements::fire::flame,同樣也可以使用using編譯指令使內(nèi)部的名稱可用:using elements::fire

在名稱空間中使用using編譯指令和using聲明,如下:

namespace myth {
    using Jill::fetch;
    using namespace elements;
    using std::count;
}

如果要訪問Jill::fetch,以下兩種方式均可訪問它。

myth::fetch
Jill::fetch

名稱空間的傳遞性

using編譯指令是可以傳遞的。如果A op B且B op C,則A op C。

using namespace myth;

/// 以上和下面兩句等價(jià)
using namespace myth;
using namespace elements;

// 給命名空間創(chuàng)建別名
namespace MEF = myth::elements::fire;
using MEF::flame;

未命名的名稱空間

往往是靜態(tài)變量的替代品。

static int counts       //全局聲明 static storage, internal linkage

/// 等價(jià)于
namespace {
    int counts          //  static storage, internal linkage
}

到此這篇關(guān)于C++ 名稱空間詳情的文章就介紹到這了,更多相關(guān)C++ 名稱空間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    C語言排序算法之冒泡排序?qū)崿F(xiàn)方法【改進(jìn)版】

    這篇文章主要介紹了C語言排序算法之冒泡排序?qū)崿F(xiàn)方法,結(jié)合具體實(shí)例形式分析了C語言實(shí)現(xiàn)的基本冒泡排序?qū)崿F(xiàn)方法及增設(shè)flag標(biāo)志位的改進(jìn)型算法,需要的朋友可以參考下
    2017-09-09
  • C語言動(dòng)態(tài)數(shù)組的使用實(shí)現(xiàn)代碼

    C語言動(dòng)態(tài)數(shù)組的使用實(shí)現(xiàn)代碼

    這篇文章主要介紹了C語言動(dòng)態(tài)數(shù)組的使用實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 帶頭結(jié)點(diǎn)的鏈表的基本操作(超詳細(xì))

    帶頭結(jié)點(diǎn)的鏈表的基本操作(超詳細(xì))

    鏈表是一種動(dòng)態(tài)分配空間的存儲(chǔ)結(jié)構(gòu),能更有效地利用存儲(chǔ)空間,通過對(duì)單鏈表基本操作的代碼實(shí)現(xiàn),我深刻領(lǐng)悟到以“指針”指示元素的后繼,在插入或刪除元素時(shí)不需要移動(dòng)元素
    2023-07-07
  • C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解

    C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解

    這篇文章主要介紹了C++編程中使用設(shè)計(jì)模式中的policy策略模式的實(shí)例講解,文章最后對(duì)策略模式的優(yōu)缺點(diǎn)有一個(gè)簡單的總結(jié),需要的朋友可以參考下
    2016-03-03
  • C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作

    C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作

    這篇文章主要介紹了C++處理輸入字符串并轉(zhuǎn)為數(shù)組的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • 解析C/C++值傳遞和址傳遞的區(qū)別

    解析C/C++值傳遞和址傳遞的區(qū)別

    今天通過本文給大家介紹C/C++值傳遞和址傳遞的區(qū)別講解,本文通過實(shí)例代碼圖文相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-10-10
  • C++類與對(duì)象的詳細(xì)說明2

    C++類與對(duì)象的詳細(xì)說明2

    這篇文章主要為大家詳細(xì)介紹了C++的類與對(duì)象,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • Dijkstra算法與Prim算法的異同案例詳解

    Dijkstra算法與Prim算法的異同案例詳解

    這篇文章主要介紹了Dijkstra算法與Prim算法的異同案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • 詳解C++中new運(yùn)算符和delete運(yùn)算符的使用

    詳解C++中new運(yùn)算符和delete運(yùn)算符的使用

    這篇文章主要介紹了C++中new運(yùn)算符和delete運(yùn)算符的使用,文章來自于微軟開發(fā)者文檔,因而根據(jù)Visual C++的一些特性來進(jìn)行講解,需要的朋友可以參考下
    2016-01-01
  • C/C++標(biāo)準(zhǔn)庫之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    C/C++標(biāo)準(zhǔn)庫之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間詳解

    最近遇到一個(gè)問題:數(shù)據(jù)庫中存放的時(shí)間為UTC時(shí)間,但是現(xiàn)在要求都出來顯示的時(shí)間為本地時(shí)間,所以就用C++實(shí)現(xiàn)了,下面這篇文章主要給大家介紹了關(guān)于C/C++標(biāo)準(zhǔn)庫之轉(zhuǎn)換UTC時(shí)間到local本地時(shí)間的方法,還有C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼,需要的朋友可以參考下。
    2017-11-11

最新評(píng)論

永嘉县| 灵寿县| 邢台县| 万载县| 启东市| 沛县| 杭锦后旗| 长海县| 高碑店市| 哈密市| 志丹县| 淮滨县| 无棣县| 乌兰浩特市| 绥滨县| 堆龙德庆县| 石景山区| 祥云县| 美姑县| 宿松县| 武功县| 南阳市| 合水县| 日照市| 卓资县| 辉县市| 孟村| 通化县| 渑池县| 且末县| 利辛县| 和田市| 嫩江县| 三门峡市| 西和县| 门源| 诸暨市| 长汀县| 宁国市| 濉溪县| 内黄县|