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

詳情介紹C++之命名空間

 更新時間:2021年09月03日 16:05:43   作者:非常規(guī)自我實現(xiàn)  
這篇文章主要詳情介紹了C++命名空間,命名空間的出現(xiàn)就是為了解決名稱沖突問題,對此感興趣的朋友可以參考下面文章

C++命名空間

1.概述

在c++中,名稱(name)可以是符號常量、變量、函數(shù)、結構、枚舉、類和對象等等。工程越大,名稱互相沖突性的可能性越大。另外使用多個廠商的類庫時,也可能導致名稱沖突。為了避免,在大規(guī)模程序的設計中,以及在程序員使用各種各樣的C++庫時,這些標識符的命名發(fā)生沖突,標準C++引入關鍵字namespace(命名空間/名字空間/名稱空間),可以更好地控制標識符的作用域。

因此:命名空間的出現(xiàn)就是為了解決名稱沖突問題

2.格式

namespace 空間名稱
{
    變量名稱
    .....
    函數(shù)聲明
    .....
}

3.定義范圍

#include <iostream>
using namespace std;

namespace test#這是正確的命名形式
{
    .....  
}

int main()
{
namespace test01 #這是錯誤的命名形式
{
    
}
    ....
}

結論:命名空間只能在全局范圍內(nèi)定義

4.瀑布式開發(fā)格式

命名空間名稱相同就是同一個命名空間

#include <iostream>
using namespace std;
namespace test
{
 ....    
}
namespace test #名稱相同就是同一個命名空間
{
    .......
}

int main()
{
    ........
}

5.命名空間的訪問方式

5.1空間名::變量名

#include <iostream>
using namespace std;
namespace test
{
    int a = 10;
}
int main()
{
    cout << test::a<<endl;
    
    .....
}    

5.2using namespace 空間名

#include <iostream>
using namespace std;
namespace test
{
    int a = 10;
}
using namespace test;#需要在命名空間定義之后
int main()
{
    cout <<a<<endl;
    
    .....
}    

需要注意的是:

在使用該語法時,需要在命名空間定義之后,否則會提示找不到。

6.命名空間可以無限嵌套

#include <iostream>
using namespace std;
namespace test01
{
    namespace test02
    {
        namespace test
        {
            int a = 10;
        }
    }

}

using namespace test01::test02::test;#如果采用第二種方式的話就需要這樣聲明
int main()
{
    cout << a << endl;

}

7.權限

命名空間不存在私有的概念,都是共有的。

這個也很好理解,因為命名空間的出現(xiàn)就是為了解決名稱沖突的問題。僅僅只是解決這個問題而已。

8.匿名命名空間

原則上禁止使用匿名命名空間,出現(xiàn)匿名命名空間這總機制就是為了解決名稱沖突

在了解上面的基礎之上,我們再來講述下面的語法規(guī)則

匿名命名空間中定義的變量等同于全局變量,但是再背顯式調(diào)用的時候,使用原生全局變量

相信大家看到這句話會覺得很絕望,但是呢,編程就是這樣,直接看代碼就對了。

#include <iostream>
using namespace std;

int a = 10;
namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << a <<endl;
    .....
}

大家猜一下,上面的結果是什么?是10 還是 20

結果是編譯不通過?。?!提示是:變量a是不明確的符號

正如上面所說,匿名空間中定義的變量等同于全局變量,那不就相當于定義了兩個相同名稱的全局變量。那不就重定義了嗎

Attention:C++中不存在變量的定義和聲明

如果要想引用全局變量,那就是如下所示

#include <iostream>
using namespace std;

int a = 10;
namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << ::a <<endl;
    .....
}

大家猜一下,上面的結果是什么?是10還是20

結果是10?。?!

正如上面所說,如果變量a被調(diào)用,則被調(diào)用的是原生全局變量,那就是10。

我們說了,匿名命名空間中定義的變量就相當于全局變量,意味著如果沒有定義原生全局變量,那么就可以像調(diào)用原生全局變量一樣調(diào)用匿名空間中的全局變量。

#include <iostream>
using namespace std;

namespace #這就是匿名命名空間
{
  int a = 20;
}
int main()
{
    cout << a <<endl;  #調(diào)用原生全局變量的方式
    .....
}

9.別名

#include <iostream>
using namespace std;

int a = 10;
namespace test
{
  int a = 20;
}
namespace alise_test = test;#這就是給命名空間

int main()
{
    cout << ::a <<endl;
    .....
}

原則上是不推薦給標準命名空間起別名

#include <iostream>
using namespace std;

int a = 10;
namespace test
{
  int a = 20;
}
namespace alise_std = std;#這是不建議的一種做法

int main()
{
    cout << ::a <<endl;
    .....
}

10.編程模型

使用命名空間的時候,最好還是遵循某種格式。不遵循這種方式也是可以的,對于我而言,準許某種框架的目的在于簡便自己編碼。

namespace test
{
    int a = 0;#變量名的定義
    int add(int a , int b );
}
int test::add(int a , int b )
{
    return a+b; 
}

PS:命名空間中存放的是變量初始化、函數(shù)的聲明、類的聲明等等,而函數(shù)的定義

11.using語法使用

using namespace 空間名;

這個語句可以在程序中的任何一個地方使用

#include <iostream>
using namespace std;

namespace test
{
  int a = 20;
}
using namespace test; #test命名空間中的符號的作用域在該語句之后,該源文件之前
void hello(void)
{
    using namespace test;#test命名空間中的符號的作用域在該語句之后,函數(shù)體之前
    
}
int main()
{
    cout << a <<endl;
    .....
}

Attention:如果沒有引用,命名空間里的代碼塊就不會被編譯

如果命名空間中有大量的符號,采用上面一種方法就不太妥當,因為實際使用到的符號也就那么幾個。

#include <iostream>
using namespace std;

namespace test
{
  int a = 20;
}
using namespace test::a; #只使用test命名空間中的a變量
int main()
{
    cout << a <<endl;
    .....
}

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

相關文章

  • C++小知識:用合適的工具來分析你的代碼

    C++小知識:用合適的工具來分析你的代碼

    今天小編就為大家分享一篇關于C++小知識:用合適的工具來分析你的代碼,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題

    解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題

    這篇文章主要介紹了解決Microsoft?Visual?C++?2010?Express?運行及調(diào)試問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-01-01
  • mysate中stat命令的實現(xiàn)方法

    mysate中stat命令的實現(xiàn)方法

    這篇文章主要介紹了mysate中stat命令的實現(xiàn)方法,stat作用:用來顯示文件的詳細信息,包括inode, atime, mtime, ctime,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2022-10-10
  • CISBitmap派生的VC++位圖透明類實例

    CISBitmap派生的VC++位圖透明類實例

    這篇文章主要介紹了CISBitmap派生的VC++位圖透明類,比較實用的功能,需要的朋友可以參考下
    2014-08-08
  • C++中引用(&)的用法與應用實例分析

    C++中引用(&)的用法與應用實例分析

    引用是C++引入的新語言特性,是C++常用的一個重要內(nèi)容之一,正確、靈活地使用引用,可以使程序簡潔、高效。故在本篇中我將對引用進行詳細討論,希望對大家更好地理解和使用引用起到拋磚引玉的作用
    2013-09-09
  • C語言實現(xiàn)超市信息管理系統(tǒng)

    C語言實現(xiàn)超市信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)超市信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言八大排序之堆排序

    C語言八大排序之堆排序

    堆排序是利用堆這種數(shù)據(jù)結構而設計的一種排序算法,堆排序是一種選擇排序,它的最壞,最好,平均時間復雜度均為O(nlogn),它也是不穩(wěn)定排序
    2022-02-02
  • 基于C語言實現(xiàn)圖書管理信息系統(tǒng)設計

    基于C語言實現(xiàn)圖書管理信息系統(tǒng)設計

    這篇文章主要為大家詳細介紹了基于C語言實現(xiàn)圖書管理信息系統(tǒng)設計與實現(xiàn),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • C++數(shù)據(jù)結構鏈表基本操作示例過程

    C++數(shù)據(jù)結構鏈表基本操作示例過程

    這篇文章主要為大家介紹了C++數(shù)據(jù)結構鏈表基本操作的示例過程有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2021-11-11
  • 詳解Visual Studio 2019(VS2019) 基本操作

    詳解Visual Studio 2019(VS2019) 基本操作

    這篇文章主要介紹了詳解Visual Studio 2019(VS2019) 基本操作,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論

青浦区| 石泉县| 安国市| 漾濞| 高青县| 淳安县| 昌平区| 岳阳市| 苍溪县| 铜川市| 广昌县| 攀枝花市| 卓尼县| 游戏| 磴口县| 博野县| 疏附县| 达日县| 宝坻区| 岚皋县| 萨嘎县| 潼南县| 玉林市| 郎溪县| 海宁市| 庆元县| 江门市| 额济纳旗| 台安县| 霍城县| 师宗县| 栾川县| 兰坪| 屏南县| 黔西| 宜宾县| 莎车县| 宁津县| 荔波县| 辉南县| 德保县|