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

C++返回值類型后置實(shí)現(xiàn)(跟蹤返回值類型)

 更新時(shí)間:2021年08月18日 10:30:12   投稿:zx  
本文主要介紹了C++返回值類型后置實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在泛型編程中,可能需要通過參數(shù)的運(yùn)算來得到返回值的類型。考慮下面這個(gè)場景:

template <typename R, typename T, typename U>
R add(T t, U u)
{
    return t+u;
}
int a = 1; float b = 2.0;
auto c = add<decltype(a + b)>(a, b);

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

那么,在 add 函數(shù)的定義上能不能直接通過 decltype 拿到返回值呢?
template <typename T, typename U>
decltype(t + u) add(T t, U u)  // error: t、u尚未定義
{
    return t + u;
}
當(dāng)然,直接像上面這樣寫是編譯不過的。因?yàn)?t、u 在參數(shù)列表中,而 C++ 的返回值是前置語法,在返回值定義的時(shí)候參數(shù)變量還不存在。

可行的寫法如下:

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

考慮到 T、U 可能是沒有無參構(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),但寫法過于晦澀,會(huì)大大增加 decltype 在返回值類型推導(dǎo)上的使用難度并降低代碼的可讀性。

因此,在 C++11 中增加了返回類型后置(trailing-return-type,又稱跟蹤返回類型)語法,將 decltype 和 auto 結(jié)合起來完成返回值類型的推導(dǎo)。

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

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

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

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

如果說前一個(gè)例子中的 add 使用 C++98/03 的返回值寫法還勉強(qiáng)可以完成,那么這個(gè)例子對(duì)于 C++ 而言就是不可能完成的任務(wù)了。

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

返回值類型后置語法,是為了解決函數(shù)返回值類型依賴于參數(shù)而導(dǎo)致難以確定返回值類型的問題。有了這種語法以后,對(duì)返回值類型的推導(dǎo)就可以用清晰的方式(直接通過參數(shù)做運(yùn)算)描述出來,而不需要像 C++98/03 那樣使用晦澀難懂的寫法。

到此這篇關(guān)于C++返回值類型后置實(shí)現(xiàn)(跟蹤返回值類型)的文章就介紹到這了,更多相關(guān)C++返回值類型后置實(shí)現(xiàn)(跟蹤返回值類型)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入探討linux下進(jìn)程的最大線程數(shù)、進(jìn)程最大數(shù)、進(jìn)程打開的文件數(shù)

    深入探討linux下進(jìn)程的最大線程數(shù)、進(jìn)程最大數(shù)、進(jìn)程打開的文件數(shù)

    本篇文章是對(duì)linux下進(jìn)程的最大線程數(shù)、進(jìn)程最大數(shù)、進(jìn)程打開的文件數(shù)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言詳細(xì)講解指針數(shù)組的用法

    C語言詳細(xì)講解指針數(shù)組的用法

    在C語言和C++等語言中,數(shù)組元素全為指針變量的數(shù)組稱為指針數(shù)組,指針數(shù)組中的元素都必須具有相同的存儲(chǔ)類型、指向相同數(shù)據(jù)類型的指針變量。指針數(shù)組比較適合用來指向若干個(gè)字符串,使字符串處理更加方便、靈活
    2022-05-05
  • 詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符

    詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符

    這篇文章主要介紹了詳解C++編程中的重載流插入運(yùn)算符和流提取運(yùn)算符,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C++ sort排序函數(shù)用法詳解

    C++ sort排序函數(shù)用法詳解

    本文主要介紹了C++ sort排序函數(shù)用法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法

    C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法

    這篇文章主要介紹了C++實(shí)現(xiàn)尋找最低公共父節(jié)點(diǎn)的方法,是數(shù)據(jù)結(jié)構(gòu)中二叉樹的一個(gè)經(jīng)典算法,有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-09-09
  • C語言堆實(shí)現(xiàn)建堆算法和堆排序

    C語言堆實(shí)現(xiàn)建堆算法和堆排序

    本文主要介紹了C語言堆實(shí)現(xiàn)建堆算法和堆排序,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-09-09
  • C++實(shí)現(xiàn)棧的操作(push和pop)

    C++實(shí)現(xiàn)棧的操作(push和pop)

    這篇文章主要介紹了C++實(shí)現(xiàn)棧的操作(push和pop),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • Qt 中開啟線程的多種方式小結(jié)

    Qt 中開啟線程的多種方式小結(jié)

    本篇文章就來整理一下 Qt 中使用線程的五種方式,方便后期回顧。前面兩種比較簡單,一筆帶過了,主要介紹后面三種,感興趣的朋友跟隨小編一起看看吧
    2021-09-09
  • 實(shí)例分享cmake編譯一個(gè)簡單c++項(xiàng)目(demo)

    實(shí)例分享cmake編譯一個(gè)簡單c++項(xiàng)目(demo)

    下面通過一個(gè)小例子來說明cmake編譯一個(gè)c++項(xiàng)目,生成可執(zhí)行文件,需要的朋友可以參考下
    2020-02-02
  • C++基本算法思想之窮舉法

    C++基本算法思想之窮舉法

    在使用窮舉法時(shí),需要明確問題的答案的范圍,這樣才可以在指定的范圍內(nèi)搜索答案。指定范圍之后,就可以使用循環(huán)語句和條件語句逐步驗(yàn)證候選答案的正確性,從而得到需要的正確答案
    2013-10-10

最新評(píng)論

铁岭县| 龙南县| 木里| 昌邑市| 崇明县| 新竹市| 祁连县| 潞西市| 南阳市| 乐亭县| 淮阳县| 阿克| 从化市| 张家口市| 同德县| 双江| 古浪县| 灌南县| 黄平县| 岐山县| 文登市| 峨眉山市| 长白| 巴林右旗| 邢台县| 潮州市| 垫江县| 阳曲县| 巫山县| 黄骅市| 库尔勒市| 苏尼特左旗| 金昌市| 九寨沟县| 开化县| 九江市| 清徐县| 洮南市| 咸宁市| 龙井市| 外汇|