欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值

 更新時(shí)間:2020年05月24日 09:32:06   作者:AllenLin  
這篇文章主要介紹了C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

作用:返回表達(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) −> 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};
}

總結(jié)

到此這篇關(guān)于C++11特性小結(jié)之decltype、類內(nèi)初始化、列表初始化返回值的文章就介紹到這了,更多相關(guān)C++11特性decltype、類內(nèi)初始化、列表初始化返回值內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言結(jié)構(gòu)體(struct)的詳細(xì)講解

    C語言結(jié)構(gòu)體(struct)的詳細(xì)講解

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • C++實(shí)現(xiàn)信息管理系統(tǒng)

    C++實(shí)現(xiàn)信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++11線程、互斥量以及條件變量示例詳解

    C++11線程、互斥量以及條件變量示例詳解

    這篇文章主要介紹了C++11線程、互斥量以及條件變量,C++11增加了線程以及線程相關(guān)的類,很方便地支持了并發(fā)編程,使得編寫多線程程序的可移植性得到了很大的提高,本文通過實(shí)例代碼給大家詳細(xì)講解,需要的朋友可以參考下
    2023-03-03
  • C語言 main 函數(shù)詳情

    C語言 main 函數(shù)詳情

    這篇文章主要介紹C語言 main 函數(shù),文章將圍繞C語言 main 函數(shù)相關(guān)資料詳細(xì)展開,需要的朋友可以參考一下
    2021-10-10
  • C語言控制臺(tái)版2048小游戲

    C語言控制臺(tái)版2048小游戲

    本文給大家分享的是2則使用C語言控制臺(tái)編寫的2048小游戲,各有優(yōu)劣,小伙伴們對(duì)比著參考下吧。
    2015-03-03
  • C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    C語言深入分析浮點(diǎn)型數(shù)據(jù)存儲(chǔ)

    使用編程語言進(jìn)行編程時(shí),需要用到各種變量來存儲(chǔ)各種信息。變量保留的是它所存儲(chǔ)的值的內(nèi)存位置。這意味著,當(dāng)您創(chuàng)建一個(gè)變量時(shí),就會(huì)在內(nèi)存中保留一些空間。您可能需要存儲(chǔ)各種數(shù)據(jù)類型的信息,操作系統(tǒng)會(huì)根據(jù)變量的數(shù)據(jù)類型,來分配內(nèi)存和決定在保留內(nèi)存中存儲(chǔ)什么
    2022-08-08
  • 給ActiveX簽名的實(shí)現(xiàn)方法詳解

    給ActiveX簽名的實(shí)現(xiàn)方法詳解

    本篇文章是對(duì)給ActiveX簽名的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言實(shí)現(xiàn)反彈球小游戲

    C語言實(shí)現(xiàn)反彈球小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)反彈球小游戲,利用函數(shù)寫的C語言小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(一)

    C語言數(shù)據(jù)結(jié)構(gòu)與算法之排序總結(jié)(一)

    這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)與算法中的插入類和交換類的各種排序,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2021-12-12
  • C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    TableDelegate自定義代理組件的主要作用是對(duì)原有表格進(jìn)行調(diào)整,本文主要介紹了QT中TableDelegate?自定義代理組件的使用教程,感興趣的朋友可以了解一下
    2021-12-12

最新評(píng)論