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

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

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

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

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

我們看一下下面這個例子:

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

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

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

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

運行后,編譯器會提示錯誤,告訴我們decltype(t+u)中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中增加了返回類型后置語法,將decltype和auto結合起來完成返回值類型的推導。

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

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

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

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C語言隊列和應用詳情

    C語言隊列和應用詳情

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

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

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

    淺談Qt QGraphics體系及刷新機制介紹

    這篇文章主要介紹了淺談Qt QGraphics體系及刷新機制介紹,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C++移動操作,RVO和NRVO詳細

    C++移動操作,RVO和NRVO詳細

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

    C語言如何在指針中隱藏數(shù)據(jù)詳解

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

    深入解析C++編程中基類與基類的繼承的相關知識

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

    C語言中的鏈接編寫教程

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

    C++?Cartographer的入口node main詳細講解

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

    C++ GetDlgItem用法案例詳解

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

    C語言實現(xiàn)密碼本小項目

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

最新評論

泾阳县| 嘉禾县| 措勤县| 宁安市| 黄骅市| 河津市| 北票市| 南江县| 西藏| 繁昌县| 高陵县| 通道| 辽阳市| 桂阳县| 红原县| 土默特右旗| 仙桃市| 靖边县| 广水市| 海兴县| 海门市| 闸北区| 沅江市| 静安区| 远安县| 秦安县| 吉安市| 广宗县| 锦屏县| 牙克石市| 留坝县| 阳春市| 大庆市| 商南县| 武宁县| 南部县| 星座| 洛宁县| 高州市| 达孜县| 嘉义市|