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

C++ namespace命名空間解析

 更新時(shí)間:2021年11月25日 10:01:08   作者:zhaozhenyu123  
考慮一種情況,當(dāng)我們有兩個(gè)同名的人,Zara,在同一個(gè)班里。當(dāng)我們需要對它們進(jìn)行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會遇到同樣的情況,所以命名空間就此產(chǎn)生

命名空間 namespace

#include<iostream>

int rand = 0;

int main()
{
	printf("%d", rand);
	
	return 0;
}

上述代碼一定會出現(xiàn)以下情況:

原因: 自己定義的rand變量為某一庫函數(shù)里面已經(jīng)聲明過的函數(shù),意思就是你自己定義的東西跟庫函數(shù)的東西重復(fù)了。這種錯誤就是命名沖突。

命名沖突問題:

  • 我們自己定義的變量、函數(shù)可能跟庫里面重名沖突。
  • 進(jìn)入公司項(xiàng)目組后,做的項(xiàng)目通常比較大,多人協(xié)作,可能命名沖突。

C語言沒有辦法很好的解決這個(gè)問題。

C++提出了一個(gè)新語法:命名空間

命名空間的定義

對于上面的問題我們使用命名空間來解決:

#include<iostream>

namespace zzy
{
	int rand = 0;
}

int main()
{
	printf("%d", zzy::rand);
	
	return 0;
}

我們使用namespace來劃定一個(gè)區(qū)域,叫做域,域的名字叫zzy(名字可以自己定義,但是最好不要跟庫已有的重復(fù))。這個(gè)域就像是隱身衣一樣,讓系統(tǒng)編譯的時(shí)候不會去這個(gè)區(qū)域里面讀取。

:: 為域作用限定符,前面是命名空間的名稱,后面是命名空間里的變量、類型、函數(shù)等。使用這個(gè)限定符來指定我們使用的是哪個(gè)命名空間里的變量

需要注意的一點(diǎn)是,命名空間是全局的,必須要寫在main函數(shù)的外邊。

下面舉些例子來幫大家更清晰的了解命名空間:

1. 函數(shù)定義在命名空間里

#include<iostream>
namespace zzy
{
	int Add(int x, int y)
	{
		return x + y;
	}
}

int main()
{
	printf("%d\n", zzy::Add(1, 2));
	return 0;
}

如果把函數(shù)的定義寫在命名空間的外面,而函數(shù)聲明在命名空間里面會怎么樣?由于命名空間會屏蔽掉,相當(dāng)于你沒有寫這個(gè)聲明。但是如果你的函數(shù)定義寫在main函數(shù)的上面就沒什么問題了。

#include<iostream>
namespace zzy
{

	int Add(int x, int y);
}

int Add(int x,int y)
{
	return x+y;
}

int main()
{
	printf("%d\n",/*zzy::*/Add(1, 2));
	return 0;
}

一點(diǎn)要注意,這個(gè)時(shí)候你不可以寫zzy::了,因?yàn)槿绻氵@么寫的話系統(tǒng)會優(yōu)先去zzy命名空間里去尋找,發(fā)現(xiàn)只有函數(shù)的聲明,沒有函數(shù)的定義,所以是沒結(jié)果的。

2.對全局變量使用命名空間

#include <iostream>
int a = 0;

int main()
{
	int a = 10;
	printf("%d",::a);//使用全局作用域的a,::前面的沒有東西代表全局作用域
}

3.命名空間的嵌套

#include <iostream>
namespace zzy
{
	int a = 10;
	namespace N1
	{
		int b = 20;
	}
}

int main()
{
	printf("%d\n",zzy::a);
	printf("%d\n",zzy::N1::b);
}

4.using命名空間

我們發(fā)現(xiàn),每次使用一些命名空間里的變量總是要加上”命名空間名稱::”,當(dāng)變量多時(shí),就會顯得很繁瑣。所以我們可以這么做:

#include <iostream>
using namespace zzy
{
	int count = 12;
	int Add(int x,int y)
	{
		return x+y;
	}
}

//解放了整個(gè)zzy空間,使里面的變量等變得不隱身了
using namespace zzy;

int main()
{
	printf("%d",count);
	printf("%d",Add(1,2));
}

也可以解放一部分變量、函數(shù)等:

#include <iostream>
using namespace zzy
{
	int count = 12;
	void B()
	{
		int cur = 0;
	}
}

//只解放了一部分變量
using zzy::B::cur;

int main()
{
	printf("%d",zzy::count);
	printf("%d",cur);
}

5.命名空間里的結(jié)構(gòu)體

#include <iostream>

using namespace zzy
{
	int count = 0;
	struct Node
	{
		int val = 0;
	};
}

int main()
{
	struct zzy::Node node;//注意::的位置,我們要找的是Node
	node.val = 12;
	printf("%d\n", node.val);
}

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

相關(guān)文章

  • C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二)

    C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(59.螺旋矩陣之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 淺談C++的幾種從鍵盤輸入方式

    淺談C++的幾種從鍵盤輸入方式

    今天小編就為大家分享一篇淺談C++的幾種從鍵盤輸入方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 使用C語言提取子字符串及判斷對稱子字符串最大長度

    使用C語言提取子字符串及判斷對稱子字符串最大長度

    這篇文章主要介紹了使用C語言提取子字符串及判斷對稱子字符串最大長度,文后附送了一道ACM競賽題目,需要的朋友可以參考下
    2015-08-08
  • C語言實(shí)現(xiàn)簡易通訊錄完整流程

    C語言實(shí)現(xiàn)簡易通訊錄完整流程

    這篇文章主要為大家介紹了C語言實(shí)現(xiàn)簡易通訊錄的完整流程,每個(gè)環(huán)節(jié)都有完整代碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2022-02-02
  • C語言 文件的隨機(jī)讀寫詳解及示例代碼

    C語言 文件的隨機(jī)讀寫詳解及示例代碼

    本文主要介紹C語言 文件的隨機(jī)讀寫,這里整理了相關(guān)資料及示例代碼以便大家學(xué)習(xí)參考,學(xué)習(xí)此部分內(nèi)容的朋友可以參考下
    2016-08-08
  • C++文件的操作及小實(shí)驗(yàn)示例代碼詳解

    C++文件的操作及小實(shí)驗(yàn)示例代碼詳解

    這篇文章主要介紹了C++文件的操作及小實(shí)驗(yàn),對于文件,它是一個(gè)流對象,對文件的操作無非是讀和寫,通過本文的學(xué)習(xí)大家將會理解文件的具體操作
    2022-05-05
  • C語言中預(yù)處理命令的使用

    C語言中預(yù)處理命令的使用

    C語言預(yù)處理是編程中非常重要的一個(gè)環(huán)節(jié),通過預(yù)處理指令和預(yù)處理器的一些特性,本文主要介紹了C語言中預(yù)處理命令的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • QT實(shí)現(xiàn)用戶登錄注冊

    QT實(shí)現(xiàn)用戶登錄注冊

    這篇文章主要為大家詳細(xì)介紹了QT實(shí)現(xiàn)用戶登錄注冊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo)的方法

    這篇文章主要介紹了vscode使用cmake時(shí)將命令行參數(shù)傳遞給調(diào)試目標(biāo),下面介紹了一個(gè)示例,將參數(shù)first_arg, second-arg和third arg傳遞給程序(此處需要注意,third arg中間雖然存在空格,但是仍然被視作一個(gè)參數(shù)),需要的朋友參考下吧
    2024-03-03
  • C語言重難點(diǎn)之內(nèi)存對齊和位段

    C語言重難點(diǎn)之內(nèi)存對齊和位段

    這篇文章主要介紹了C語言重難點(diǎn)之內(nèi)存對齊和位段,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評論

柯坪县| 西畴县| 五华县| 宾川县| 塘沽区| 沁源县| 三都| 遵化市| 新疆| 大厂| 三穗县| 龙川县| 永定县| 清水河县| 漳平市| 安泽县| 富宁县| 福安市| 乐亭县| 民丰县| 蕲春县| 天镇县| 独山县| 扶余县| 马关县| 凤台县| 南郑县| 徐州市| 渭南市| 漳平市| 丹棱县| 广宗县| 姜堰市| 湟中县| 灵璧县| 连南| 崇仁县| 射洪县| 太仆寺旗| 壤塘县| 辛集市|