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

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

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

在泛型編程中,可能需要通過參數(shù)的運算來得到返回值的類型??紤]下面這個場景:

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);

我們并不關心 a+b 的類型是什么,因此,只需要通過 decltype(a+b) 直接得到返回值類型即可。但是像上面這樣使用十分不方便,因為外部其實并不知道參數(shù)之間應該如何運算,只有 add 函數(shù)才知道返回值應當如何推導。

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

可行的寫法如下:

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

考慮到 T、U 可能是沒有無參構造函數(shù)的類,正確的寫法應該是這樣:

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

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

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

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

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

為了進一步說明這個語法,再看另一個例子:

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

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

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

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

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

相關文章

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

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

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

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

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

    詳解C++編程中的重載流插入運算符和流提取運算符

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

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

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

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

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

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

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

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

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

    Qt 中開啟線程的多種方式小結

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

    實例分享cmake編譯一個簡單c++項目(demo)

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

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

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

最新評論

高尔夫| 会宁县| 永宁县| 容城县| 潢川县| 安泽县| 徐汇区| 宣恩县| 奉节县| 恭城| 崇明县| 新安县| 澄迈县| 十堰市| 奉节县| 禹州市| 广东省| 衡山县| 商水县| 孝昌县| 沅江市| 句容市| 如皋市| 怀来县| 临澧县| 城步| 耿马| 和顺县| 佛坪县| 富平县| 武隆县| 商南县| 安多县| 枣阳市| 无为县| 伊春市| 云龙县| 大埔县| 阿图什市| 金乡县| 登封市|