国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于c++的namespace,你真的了解嗎?真的會用嗎?

Lionad-Morotar / 1219人閱讀

摘要:據(jù)我了解,很多學校在學習的時候,老師會讓學生死記一條語句,那就是那么你真的了解它嗎命名空間是一個命名空間。如果我們真的想使用的話,的命名空間遍給了我們解決方法使用命名空間。

據(jù)我了解,很多學校在學習c++的時候,老師會讓學生死記一條語句,那就是

using?namespace?std;

那么你真的了解它嗎?

(1)命名空間

namespace是一個命名空間。在講述命名空間之前先了解為什么c++之父要創(chuàng)造這個功能。

在一個巨大的項目面前,很難保證每一個的協(xié)調(diào)一致,如果張三用了某一個變量,李四又不知道張三用了這個變量,那么這會導(dǎo)致命名重復(fù)。為了解決這個問題,就有了命名空間這個概念。

再講一句,我們有一些函數(shù),比如printf函數(shù),這些函數(shù)是編寫出來的,只是編寫者取了這個printf當做函數(shù)的名字而已,所以我們定義變量的時候才不能使用printf等會產(chǎn)生爭議的名字。

如果我們真的想使用的話,c++的命名空間遍給了我們解決方法----使用命名空間。

#include#includeint main(){    int printf=1;    printf("%d",printf);//這里我們暫時使用printf進行演示,所以引上頭文件stdio.h}

首先毫無疑問,這個是不可能的

如果有的老鐵就是想用printf的話,我們此時就可以使用命名空間了。

首先:命名空間是全局的,必須寫在main函數(shù)外面

#include#includenamespace lxy{   int printf=1;}int main(){   printf("%d",lxy::printf);   return 0;}

這樣的話是可以把1打印出來的,接下來詳細講一下:

這個lxy的位置是我自己命名的,代表這個是我自己的命名空間,當然這里你可以任意的命名。

這個namespace是一個域,跟結(jié)構(gòu)體不一樣,結(jié)構(gòu)體那個是聲明,這個域就像是隱身衣一樣,讓系統(tǒng)編譯的時候不會去這個區(qū)里面讀取,所以這個時候系統(tǒng)不會認為出現(xiàn)了兩個printf,從而不會引發(fā)問題,但是當我們使用的時候我們可以寫上lxy::也就是命名空間的名字加個域作用限定符讓系統(tǒng)到命名空間查找這個變量。

這里要注意的是:命名空間是全局的,必須寫在main外面,且這個東西僅僅就是加了一個外殼,這個外殼的作用是讓編譯器編譯的時候不在這個空間里面作文章。所以里面該怎么寫就怎么寫,比如可以寫結(jié)構(gòu)體,可以寫函數(shù)等等。相當于是你在main外面寫了一些東西,但是加上namespace加個隱身而已。

但是外面要牢記,這個東西是一個隱身衣,就可以應(yīng)對各種情況,在lxy::之前這個隱身衣一直在隱身。

下面列舉一些例子:

#include#includenamespace lxy {	int printf;}int main(){	printf = 1;//錯,系統(tǒng)會認為你對這個函數(shù)賦值了,沒有任何意義,直接報錯	lxy::printf = 1;//對,你專門用了printf這個(全局)變量,我們說過了int printf寫在main外面,是全局的	//只是加上了隱身buff而已。	printf("%d", lxy::printf);	return 0;}

函數(shù)也一樣的:

#include#includenamespace lxy {	int printf;	int Add(int a, int b)	{		return a + b;	}}int main(){	printf("%d", lxy::Add(5,6));	return 0;}

但是如果我把函數(shù)實現(xiàn)寫在外面,里面寫函數(shù)聲明呢?因為隱身衣的緣故,相當于你沒有寫函數(shù)聲明,如果你的函數(shù)定義寫在main上面的話,這樣也可以。(同一個cpp文件)

#include#includenamespace lxy {	int printf;	int Add(int a, int b);}int Add(int a, int b){	return a + b;}int main(){	printf("%d", /*lxy::*/Add(5,6));	return 0;}

請注意,這個時候你不可以寫lxy::了,因為如果你這么寫的話系統(tǒng)會優(yōu)先的馬上去lxy的命名空間查找,發(fā)現(xiàn)只有函數(shù)定義哦,所以肯定是打印不出來的。

把本代碼函數(shù)定義移到其他cpp文件或者main下面的話,也是無法打印的。

我們等會講完之后會專門把結(jié)構(gòu)體提出來講。

注意:1.namespace可以嵌套

2.可以在不同的地方使用多次,比如不同的cpp文件中。其中命名空間名字一樣的空間會被編譯器整合在一起,所以你可以在一個源文件里面寫函數(shù)聲明,另一個里面寫函數(shù)定義。這是沒問題的。

?(2)命名空間的使用

1.嵌套命名空間的使用(我這里可以使用rand這個函數(shù)名作為變量因為我隱身了)

#include#includenamespace lxy {	namespace yzza {		int rand;	}}using namespace std;int main(){	lxy::yzza::rand = 5;	cout << lxy::yzza::rand << endl;	return 0;}

2.如果你不想寫lxy::這樣復(fù)雜的東西可以解除隱身,但是這個時候你已經(jīng)解除了哦,相當于沒有隱身了。

#include#includenamespace lxy {	namespace yzza {		int rand1;	}	int a=10;}using namespace std;using namespace lxy::yzza;//這樣代表解除的是yzza,此時相當于變量a沒有解除的,要解除a你還要寫//using namespace lxy;int main(){	rand1 = 5;	cout << rand1 <

這樣解放的是整個命名空間,你也可以只解放一個變量

#include#includenamespace lxy {	namespace yzza {		int rand1;	}	int a=10;}using namespace std;using lxy::yzza::rand1;//解放rand1using lxy::a;//解放aint main(){	rand1 = 5;	cout << rand1 <

那么回到標題的問題,你們知道為什么要加上這句話了嗎?

因為c++的函數(shù)名全部定義在std這個命名空間里面。如果不加這句話你加上std::也是一樣可以使用庫函數(shù)的。不過你就不能定義跟函數(shù)重名的變量了。

關(guān)于結(jié)構(gòu)體提一句。

#include#includenamespace lxy {	struct yzza {		int a;	}N1;}//using lxy::N1;int main(){	lxy::N1.a = 5;	printf("%d", lxy::N1.a);	return 0;}

這里是結(jié)構(gòu)體變量名直接定義了的,直接按照上面的寫。

#include#includenamespace lxy {	struct yzza {		int a;	}N1;}using lxy::yzza;int main(){	N1.a = 5;	printf("%d", N1.a);	return 0;}

此時寫lxy::yzza是直接錯誤的,編譯器直接報錯

#include#includenamespace lxy {	struct yzza {		int a;	};}using lxy::yzza;int main(){	struct yzza N1;	N1.a = 5;	printf("%d", N1.a);	return 0;}

直接寫lxy::yzza。

#include#includenamespace lxy {	struct yzza {		int a;	};}//using lxy::yzza;int main(){	struct lxy::yzza N1;//注意::的位置,我們找的是yzza,不能寫	//struct yzza lxy::N1	N1.a = 5;//此時這里什么都不用寫了,因為我的結(jié)構(gòu)體變量已經(jīng)定義完成了	printf("%d",  N1.a);	return 0;}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/125078.html

相關(guān)文章

  • 多線程通信三大法器,會用

    摘要:是多線程之間通信最重要的個方法,今天,棧長給大家普及一下它們的知識要點及應(yīng)用實戰(zhàn)。實戰(zhàn)微信公眾號技術(shù)棧技術(shù)棧上面的例子結(jié)合來演示了它們的相互作用。更多多線程技術(shù)文章請在技術(shù)棧微信公眾號后臺回復(fù)關(guān)鍵字多線程。 wait, notify, notifyAll 是多線程之間通信最重要的 3 個方法,今天,棧長給大家普及一下它們的知識要點及應(yīng)用實戰(zhàn)。 定義 wait:讓持有該對象鎖的線程等待;...

    liuyix 評論0 收藏0
  • 知道Python字符串怎么用

    摘要:方法可接收兩個參數(shù),第一個參數(shù)是分隔符,即用來分隔字符串的字符,默認是所有的空字符,包括空格換行制表符等。拆分過程會消耗分隔符,所以拆分結(jié)果中不包含分隔符。 正如《你真的知道Python的字符串是什么嗎?》所寫,Python 中字符串是由 Uniocde 編碼的字符組成的不可變序列,它具備與其它序列共有的一些操作,例如判斷元素是否存在、拼接序列、切片操作、求長度、求最值、求元素的索引位...

    scwang90 評論0 收藏0
  • 知道Python字符串怎么用

    摘要:方法可接收兩個參數(shù),第一個參數(shù)是分隔符,即用來分隔字符串的字符,默認是所有的空字符,包括空格換行制表符等。拆分過程會消耗分隔符,所以拆分結(jié)果中不包含分隔符。 正如《你真的知道Python的字符串是什么嗎?》所寫,Python 中字符串是由 Uniocde 編碼的字符組成的不可變序列,它具備與其它序列共有的一些操作,例如判斷元素是否存在、拼接序列、切片操作、求長度、求最值、求元素的索引位...

    jifei 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<