欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

總結(jié)C++11中decltype、類內(nèi)初始化、列表初始化返回值

小編這次要給大家分享的是總結(jié)C++11中decltype、類內(nèi)初始化、列表初始化返回值,文章內(nèi)容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。

成都創(chuàng)新互聯(lián)專注骨干網(wǎng)絡(luò)服務(wù)器租用十年,服務(wù)更有保障!服務(wù)器租用,德陽機(jī)房托管 成都服務(wù)器租用,成都服務(wù)器托管,骨干網(wǎng)絡(luò)帶寬,享受低延遲,高速訪問。靈活、實(shí)現(xiàn)低成本的共享或公網(wǎng)數(shù)據(jù)中心高速帶寬的專屬高性能服務(wù)器。

作用:返回表達(dá)式或變量的類型

返回值規(guī)則:

  • 若e是一個(gè)左值(lvalue,即“可尋址值”),則decltype(e)將返回T&
  • 若e是一個(gè)臨終值(xvalue),則返回值為T&&
  • 若e是一個(gè)純右值(prvalue),則返回值為T

decltype()不會(huì)執(zhí)行括號(hào)內(nèi)的表達(dá)式,decltype返回的類型是用于聲明的,不能用于單純的判斷。比如decltype(a)==int,是不可以的,只能是在定義新的變量、返回值的地方使用:

int a=1;
decltype(a) b (等價(jià)于int b)

若是給變量加多了1個(gè)括號(hào),則會(huì)成為一個(gè)表達(dá)式。

int a = 1;
int b=2;
decltype((a)) d=b // decltype((a)) 
返回類型int&。而引用必須賦初值,所以這里的d必須賦初值。

若表達(dá)式和指針相關(guān)的用法:

設(shè)p是指向int變量的指針

  1. decltype(*p)-》返回int& 即引用
  2. decltype(p)-》返回int* 即指針
  3. decltype(&p)-》返回int** 即指針的指針。

這里解釋一下為什么1返回的是引用而不是int:因?yàn)?p返回的本質(zhì)上就是一個(gè)引用,當(dāng)我們向*p賦值的時(shí)候,改變的是變量原本的值,而不是做了一個(gè)拷貝,顯然這是引用的性質(zhì)。

泛型編程中使用decltype:

通過和尾置返回類型結(jié)合,可以使得返回值可以由編譯器推斷,無需程序員指出。主要用于編寫轉(zhuǎn)發(fā)函數(shù)

int& foo(int& i);
float foo(float& f);

template <class T> 
auto transparent_forwarder(T& t) &#8722;> decltype(foo(t)) 
{
 return foo(t);
}

像這個(gè)例子如果沒有decltype,我們無法確定foo(t)到底是兩個(gè)備選函數(shù)中的哪一個(gè),因?yàn)檫@是在運(yùn)行時(shí)決定的。這樣子我們無法直接編寫transparent_forwarder函數(shù)的返回值。

還有其他很多例子,decltype常用于難以確定變量類型的地方,而模板就是為了適配多類型而產(chǎn)生的,所以在泛型編程中,很多時(shí)候都會(huì)用到decltype來做到靈活定義變量類型。

類內(nèi)初始化

C++11以前是不可以在一個(gè)類的數(shù)據(jù)成員聲明的時(shí)候初始化的,除非是一個(gè)const的靜態(tài)變量:

class A
{
 static int i = 1; //correct,不得不在此賦值,因?yàn)閏onst常量必須在聲明時(shí)賦值
 int num=2; //error,不允許在類內(nèi)聲明的時(shí)候?qū)?shù)據(jù)成員初始化
};

這樣子帶來繁瑣的問題就是:盡管我們只是想為所有該類的實(shí)例的數(shù)據(jù)成員都設(shè)置一個(gè)初始值,也必須自己定義一個(gè)構(gòu)造函數(shù)才能做到。

于是在c++11:允許直接在類內(nèi)初始化值(前提:這個(gè)值必須是常量表達(dá)式)。

順序:類內(nèi)部初始化先于構(gòu)造函數(shù)初始化進(jìn)行,構(gòu)造函數(shù)初始化會(huì)覆蓋類內(nèi)部初始化。也就是說,如果我們即定義了類內(nèi)初始化值,又定義了自己的構(gòu)造函數(shù),最終的結(jié)果還是按照我們的意愿,對(duì)數(shù)據(jù)成員按照構(gòu)造函數(shù)賦值。

使用方法:

class A
{
 int num=2; //correct,C++11允許在類內(nèi)聲明的時(shí)候?qū)?shù)據(jù)成員初始化
 int a{7} //用花括號(hào)賦值也可以,a=7 
};

注意:C++11中,仍然沒有改變靜態(tài)數(shù)據(jù)成員必須在類內(nèi)聲明,類外初始化的事實(shí)。

class A
{
 static int d = 1; //error
};
int A::d = 1 //correct,一般來說:初始化語句會(huì)放在cpp文件,類定義放在h文件

列表初始化返回值

在C++11之前,如果我們想要返回一組數(shù)據(jù),我們必須在子函數(shù)中構(gòu)造一個(gè)對(duì)應(yīng)的容器,借助容器來進(jìn)行返回。

vector<int> process()
{
 vector<int> v={1,2,3,4}
 return v;
}

在新標(biāo)準(zhǔn)下,我們可以直接返回字面值,該字面值會(huì)用于容器的構(gòu)造,而無需我們自己去構(gòu)造。

vector<int> process()
{
 return {1,2,3,4};
}

看完這篇關(guān)于總結(jié)C++11中decltype、類內(nèi)初始化、列表初始化返回值的文章,如果覺得文章內(nèi)容寫得不錯(cuò)的話,可以把它分享出去給更多人看到。

網(wǎng)站標(biāo)題:總結(jié)C++11中decltype、類內(nèi)初始化、列表初始化返回值
本文網(wǎng)址:http://aaarwkj.com/article26/pdiccg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航App開發(fā)、品牌網(wǎng)站制作網(wǎng)站建設(shè)App設(shè)計(jì)、網(wǎng)站排名

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

小程序開發(fā)
夜夜春国产精品不卡一区二区| 国产原创av超爽剧情系列 | 相泽南亚洲一区二区在线播放| 欧美日韩亚洲一区二区搜索| 日韩人妻精品久久免费| 超碰av之男人的天堂| 91嫩草中文字幕在线| 麻豆视传媒短视频免费看| 欧美色一区二区三区四区| 精品一区二区在线欧美日韩| 高潮内射一区二区三区| 麻豆av永久地址久久精品| 开心激情欧美一区二区| 亚洲中文字幕一二区日韩| 欧美日韩精品综合国产| 日本在线观看高清区一区二| 日韩精品在线观看电影 | 一区二区三区四区中文在线| 在线观看永久免费黄色| 男人天堂av东京热伊人| 91九色在线精品人妻| 粉嫩美女精品一区二区| 国产精品麻豆色哟哟av| 大香蕉欧美日韩在线视频| 欧美成人精品资源在线观看| 欧美黄片在线免费观看视频| 欧美日韩另类综合一区| 国产在线精品91国自产拍| 91欧美在线激情视频| 99热这里在线只有精品| 日本三本道成人免费毛片| 亚洲欧美成人综合网站| 日韩欧美中文字幕区| 午夜丁香婷婷爽少妇av| 精品久久久久久蜜臀av| 91超碰这里只有精品国产| 午夜欧美激情在线视频| 肥胖老熟女一区二区三区| 日韩美女毛片啪啪响| 国产三级国产精品国产国在线观看| 国产精品国产亚洲精品看不|