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

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

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

作用:返回表達式或變量的類型

返回值規(guī)則:

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

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

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

若是給變量加多了1個括號,則會成為一個表達式。

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

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

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

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

這里解釋一下為什么1返回的是引用而不是int:因為*p返回的本質(zhì)上就是一個引用,當我們向*p賦值的時候,改變的是變量原本的值,而不是做了一個拷貝,顯然這是引用的性質(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);
}

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

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

類內(nèi)初始化

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

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

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

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

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

使用方法:

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

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

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

列表初始化返回值

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

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

在新標準下,我們可以直接返回字面值,該字面值會用于容器的構(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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文帶你了解C++中的右值引用與移動語義

    一文帶你了解C++中的右值引用與移動語義

    本篇文章主要為大家詳細介紹了C++中的右值引用與移動語義的相關(guān)知識,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2023-03-03
  • C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn)

    C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn)

    scandir?函數(shù)用于列舉指定目錄下的文件列表,本文主要介紹了C語言scandir函數(shù)獲取文件夾內(nèi)容的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • C++實現(xiàn)將輸入復(fù)制到輸出的方法

    C++實現(xiàn)將輸入復(fù)制到輸出的方法

    這篇文章主要介紹了C++實現(xiàn)將輸入復(fù)制到輸出的方法,實例分析了C++字符串轉(zhuǎn)換及輸入輸出操作的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 使用VS Code的開發(fā)環(huán)境配置教程圖文詳解

    使用VS Code的開發(fā)環(huán)境配置教程圖文詳解

    這篇文章主要介紹了使用VS Code的開發(fā)環(huán)境配置教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • C++ namespace案例詳解

    C++ namespace案例詳解

    這篇文章主要介紹了C++ namespace案例詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C++?Qt實現(xiàn)動態(tài)增加垂直滾動條

    C++?Qt實現(xiàn)動態(tài)增加垂直滾動條

    本博文源于筆者正在工作的一個小內(nèi)容,內(nèi)容涉及到為qt動態(tài)增加垂直滾動條,文章分為三個部分,問題起源,問題解決方案,問題解決成功效果,思路清晰,文章干貨滿滿,復(fù)制源碼即可使用,需要的朋友可以參考下
    2023-08-08
  • Qt QFtp客戶端實現(xiàn)上傳下載文件

    Qt QFtp客戶端實現(xiàn)上傳下載文件

    本文主要介紹了Qt QFtp客戶端實現(xiàn)上傳下載文件,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++入門淺談之類和對象

    C++入門淺談之類和對象

    C++ 是一門面向?qū)ο蟮木幊陶Z言,理解 C++,首先要理解類(Class)和對象(Object)這兩個概念。下面和小編一起來學(xué)習(xí)吧
    2021-10-10
  • c語言中if 語句的作用范圍示例代碼

    c語言中if 語句的作用范圍示例代碼

    if語句的作用范圍只有緊跟if的第一條表達式,下面的示例將告訴你,感興趣的朋友可以了解下
    2013-09-09
  • C語言實現(xiàn)紅黑樹詳細步驟+代碼

    C語言實現(xiàn)紅黑樹詳細步驟+代碼

    大家好,本篇文章主要講的是C語言實現(xiàn)紅黑樹詳細步驟+代碼,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01

最新評論

甘南县| 浠水县| 龙江县| 轮台县| 友谊县| 雅江县| 凌源市| 禄丰县| 佛冈县| 庄河市| 北海市| 浦城县| 临湘市| 裕民县| 五家渠市| 临西县| 高安市| 黑水县| 大英县| 盐边县| 渑池县| 竹北市| 和顺县| 九龙县| 二连浩特市| 唐海县| 靖宇县| 勐海县| 石河子市| 安阳县| 河北区| 孝感市| 安顺市| 昭苏县| 枣强县| 夏津县| 阆中市| 华坪县| 永寿县| 来安县| 贡觉县|