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

C++11返回類型后置語(yǔ)法的使用示例

 更新時(shí)間:2017年10月11日 09:50:14   作者:阿阿阿阿阿阿鑫  
本篇文章主要介紹了C++11返回類型后置語(yǔ)法的使用示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

C++11新標(biāo)準(zhǔn)增加的auto不僅可以自動(dòng)推斷變量類型,還能結(jié)合decltype來(lái)表示函數(shù)的返回值。這些新特性可以讓我們寫出更簡(jiǎn)潔、更現(xiàn)代的代碼。

在泛型編程中,可能需要通過(guò)參數(shù)的運(yùn)算來(lái)得到返回值的類型。

我們看一下下面這個(gè)例子:

#include<iostream>
using namespace std;


template <typename R,typename T, typename U>
R add(T t,U u)
{
  return t+u;
}

int main()
{
  int a=1;
  float b=2.0;
  auto c = add<decltype(a+b)>(a,b);
}

我們并不關(guān)心a+b類型是什么,因?yàn)?,只需要通過(guò)decltype(a+b)直接得到返回值類型即可。但像上面這樣使用十分不方便,因?yàn)橥獠科鋵?shí)并不知道參數(shù)之間應(yīng)該如何運(yùn)算,只有add函數(shù)才知道返回值應(yīng)當(dāng)如何推導(dǎo)。

那么我們可不可以直接在函數(shù)定義上通過(guò)decltype拿到返回值呢?比如像這樣:

template <typename T, typename U>
decltype(t+u) add(T t,U u)      //編譯錯(cuò)誤,t,u未定義
{
  return t+u;
}

運(yùn)行后,編譯器會(huì)提示錯(cuò)誤,告訴我們decltype(t+u)中t和u在此作用域中尚未聲明。

因?yàn)閠、u在參數(shù)列表中,而C++的返回值是前置語(yǔ)法,在返回值定義的時(shí)候參數(shù)變量還不存在。

對(duì)于本例子,可行的寫法如下:

template <typename T, typename U>
decltype(T()+U()) add(T t,U u)    
{
  return t+u;
}

考慮到T、U可能是沒(méi)有無(wú)參構(gòu)造函數(shù)的類,正確的寫法應(yīng)該是這樣:

template <typename T, typename U>
decltype((*(T*)0)+(*(U*)0)) add(T t,U u)    
{
  return t+u;
}

雖然成功地使用decltype完成了返回值的推導(dǎo),但寫法過(guò)于晦澀,會(huì)大大增加decltype在返回值類型推導(dǎo)上的使用難度并降低了代碼的可讀性。

因此,在C++11中增加了返回類型后置語(yǔ)法,將decltype和auto結(jié)合起來(lái)完成返回值類型的推導(dǎo)。

返回類型后置語(yǔ)法是通過(guò)auto和decltype結(jié)合起來(lái)使用的。上面的add函數(shù),使用新的語(yǔ)法可以寫成:

template <typename T, typename U>
auto add(T t,U u) ->decltype(t+u)    
{
  return t+u;
}

為了進(jìn)一步說(shuō)明這個(gè)語(yǔ)法,再看另一個(gè)例子:

#include<iostream>
using namespace std;


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

template <typename T>
auto func(T& val) -> decltype(foo(val))
{
  return foo(val);
}

在這個(gè)例子中,使用decltype結(jié)合返回值后置語(yǔ)法很容易推導(dǎo)出了foo(val)可能出現(xiàn)的返回值類型,并將其用到了func上。

返回值類型后置語(yǔ)法,是為了解決函數(shù)返回值類型依賴于參數(shù)而導(dǎo)致難以確定返回值類型的問(wèn)題。有了這種語(yǔ)法以后,對(duì)返回值類型的推導(dǎo)就可以用清晰的方式描述出來(lái)。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言隊(duì)列和應(yīng)用詳情

    C語(yǔ)言隊(duì)列和應(yīng)用詳情

    這篇文章主要介紹了C語(yǔ)言隊(duì)列和應(yīng)用詳情,文章將讓大家掌握掌握隊(duì)列的原理和作用、掌握隊(duì)列的寫法、掌握隊(duì)列在產(chǎn)品中的應(yīng)用,需要的朋友可以參考一下
    2022-03-03
  • strcat 函數(shù)的使用指南

    strcat 函數(shù)的使用指南

    strcat是連接字符串的函數(shù)。函數(shù)返回指針,兩個(gè)參數(shù)都是指針,第一個(gè)參數(shù)所指向的內(nèi)存的地址必須能容納兩個(gè)字符串連接后的大小。
    2015-09-09
  • 淺談Qt QGraphics體系及刷新機(jī)制介紹

    淺談Qt QGraphics體系及刷新機(jī)制介紹

    這篇文章主要介紹了淺談Qt QGraphics體系及刷新機(jī)制介紹,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • C++移動(dòng)操作,RVO和NRVO詳細(xì)

    C++移動(dòng)操作,RVO和NRVO詳細(xì)

    本文將討論了何時(shí)C++會(huì)自動(dòng)進(jìn)行移動(dòng)操作,并且說(shuō)明了復(fù)制消除,RVO和NRVO優(yōu)的化等香瓜吧資料,需要的小伙伴可以參考一下
    2021-09-09
  • C語(yǔ)言如何在指針中隱藏?cái)?shù)據(jù)詳解

    C語(yǔ)言如何在指針中隱藏?cái)?shù)據(jù)詳解

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言如何在指針中隱藏?cái)?shù)據(jù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧
    2018-12-12
  • 深入解析C++編程中基類與基類的繼承的相關(guān)知識(shí)

    深入解析C++編程中基類與基類的繼承的相關(guān)知識(shí)

    這篇文章主要介紹了C++編程中基類與基類的繼承的相關(guān)知識(shí),包括多個(gè)基類繼承與虛擬基類等重要知識(shí),需要的朋友可以參考下
    2016-01-01
  • C語(yǔ)言中的鏈接編寫教程

    C語(yǔ)言中的鏈接編寫教程

    這篇文章主要介紹了C語(yǔ)言中的鏈接編寫教程,是C語(yǔ)言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-08-08
  • C++?Cartographer的入口node main詳細(xì)講解

    C++?Cartographer的入口node main詳細(xì)講解

    這篇文章主要介紹了C++Node類Cartographer的入口node main,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2023-03-03
  • C++ GetDlgItem用法案例詳解

    C++ GetDlgItem用法案例詳解

    這篇文章主要介紹了C++ GetDlgItem用法案例詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)密碼本小項(xiàng)目,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02

最新評(píng)論

祁东县| 湾仔区| 手机| 治多县| 河池市| 东安县| 宁晋县| 宝应县| 佛教| 同仁县| 呼图壁县| 岳池县| 蓬安县| 富顺县| 青川县| 梁平县| 蓬安县| 福海县| 得荣县| 延川县| 乡宁县| 璧山县| 潞西市| 手机| 巴彦淖尔市| 禄劝| 宁南县| 枣强县| 九寨沟县| 磐石市| 漳平市| 吉木萨尔县| 根河市| 临清市| 绥江县| 平潭县| 会理县| 濮阳市| 波密县| 都匀市| 新巴尔虎左旗|