0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

C++ decltype和返回類型后置使用方法

冬至子 ? 來源:iDoitnow ? 作者:艱默 ? 2023-07-18 15:37 ? 次閱讀

1. decltype

decltype的使用方式如下:

decltype(expression) var;

關(guān)鍵字decltype的作用是將變量的類型聲明為表達式指定的類型。即將var的類型聲明為expression指定的類型。編譯器在處理decltype的時候,實際上需要對expression進行一個核對,然后才能確定var的類型。其流程和核對規(guī)則大致如下:

  • 1)如果expression是一個沒有用括號括起來的標識符,則var的類型與該標識符的類型相同 。例如:
double x = 1.0;
double y = 2.0;
double &lx = x; 
const double *pd;

decltype(x) m;      //m的類型為double
decltype(lx) n = y; //n的類型為double &
decltype(pd) u;     //u的類型為const double *
  • 2) :如果expression的條件不符合1), expression是一個函數(shù)的調(diào)用,則var的類型與函數(shù)的返回值類型相同。 例如:
int sum(int a, int b){...}

decltype(sum(1,2)) m; //m的類型為int
  • 3) :如果expression的條件不滿足1)、2), expression是一個左值,則var指向該左值類型的引用。 例如:
double xx = 1.0;

decltype( (xx) ) rx = xx; //rx的類型是double &
decltype(xx) m = xx; //m的類型是double,因為雖然xx是左值,但該類型的確定在步驟1)就已經(jīng)確認了,所以走不到步驟3)

:括號并不能改變表達式的值和左值性。】

  • 4)如果expression的條件不滿足1)、2)、3),則expression的類型就是var的類型。 例如:
int a = 1;
int &b = a;
int &c = a;

decltype(a+1) a1; //a1的類型為int
decltype(100L) aa;//aa的類型為long
decltype(b+c) bc; //bc的類型為int,雖然b和c都是引用,但b+c不是引用,而是兩個int的和,因此bc的類型也為int

2. 返回類型后置

C++11新增加了一種函數(shù)聲明的語法:在函數(shù)名和參數(shù)后面指定返回類型。該語法與auto搭配使用,其使用形式如下所示:

auto fun(int a, int b) - > int

該語法主要是為了解決某些模板函數(shù)返回值類型問題,例如下面這個模板函數(shù):

template< typename T, typename U >
??? fun(T t, U u)
{
    ...
    return t + u;
}

該模板函數(shù)的返回值如何確定呢?首先很容易想到的是將decltype(t+u)設(shè)置為該模板函數(shù)的返回值,但是不行的是,此時還未聲明xy,編譯器還識別不到他們,更無法使用他們,因此,C++11新增了返回值類型后置的這種語法,針對上述的模板函數(shù),使用新增的語法可以寫為:

template< typename T, typename U >
auto fun(T t, U u) - > decltype(t + u) //此時decltype在參數(shù)t和u聲明的后面,可以正常使用他們
{
    ...
    return t+u;
}
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • C++語言
    +關(guān)注

    關(guān)注

    0

    文章

    147

    瀏覽量

    6952
  • gcc編譯器
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    3347
收藏 人收藏

    評論

    相關(guān)推薦

    C++打印類型名稱的分析與實現(xiàn)

    打印類型名稱,聽起來像是一個很簡單的需求,但在目前的C++當中,并非易事。
    發(fā)表于 10-20 14:08 ?1366次閱讀

    STM32 C++串口類

    使用方法:1. 添加cpp文件到c++工程中2.實例化一個串口對象SerialPort1serial;3.測試:serial
    發(fā)表于 01-30 22:19

    C++標準庫學習筆記重點

    in each C++versionvector;//OK since C++113.以auto聲明的變量,其類型會根據(jù)初值被自動推導出來。auto i=42;//i has type intvector
    發(fā)表于 10-23 20:28

    學習C++方法以及C++的就業(yè)方向

    學習方向:嵌入式+人工智能嵌入式是一門技術(shù)學習目標1.嵌入式開發(fā)概述;(面向?qū)ο笤谇度胧介_發(fā)中角色)2.嵌入式Linux C++編程;(C++概述、C++學習方法、
    發(fā)表于 12-24 07:32

    C++教程第三章數(shù)據(jù)類型

    C++教程第三章數(shù)據(jù)類型 什么是數(shù)據(jù)類型一定的數(shù)據(jù)在計算機的內(nèi)部表示;該數(shù)據(jù)所表示的值的集合;在該數(shù)據(jù)上的一系列操作。
    發(fā)表于 05-15 17:56 ?48次下載

    turbo c 2.0使用說明,使用方法,使用指南

    turbo c 2.0使用說明,使用方法 在開始看本文以前,我先說明一下C語言的安裝和使用中最應(yīng)該注意的地方:許多網(wǎng)友在下載Turbo C 2.0和Turbo
    發(fā)表于 09-18 09:51 ?3312次閱讀

    C++內(nèi)存泄漏分析方法

    C++是一種非常流行的計算機編程語言,在使用的過程中容易出現(xiàn)內(nèi)存泄漏問題,而該問題往往難以識別。給出了一種對C++內(nèi)存泄漏問題進行分析的方法,該方法得到
    發(fā)表于 11-23 11:19 ?5次下載
    <b class='flag-5'>C++</b>內(nèi)存泄漏分析<b class='flag-5'>方法</b>

    VISUAL C++教程之VISUAL C++的安裝和使用方法

    本文檔的主要內(nèi)容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
    發(fā)表于 12-27 16:32 ?19次下載
    VISUAL <b class='flag-5'>C++</b>教程之VISUAL <b class='flag-5'>C++</b>的安裝和<b class='flag-5'>使用方法</b>

    Visual C++教程之C++的語言資料概述免費下載

    本文檔詳細介紹的是Visual C++教程之C++的語言資料概述免費下載主要內(nèi)容包括了:1 從CC++的程序結(jié)構(gòu) ,2 程序書寫規(guī)范,3 數(shù)據(jù)類型
    發(fā)表于 02-15 15:59 ?3次下載
    Visual <b class='flag-5'>C++</b>教程之<b class='flag-5'>C++</b>的語言資料概述免費下載

    c++ 之布爾類型和引用的學習總結(jié)

    c語言里面我們知道是沒有布爾數(shù)據(jù)類型的,而在C++中添加了布爾數(shù)據(jù)類型(bool),它的取值是:true或者false(也就是1或者0),在內(nèi)存大小上它占用一個字節(jié)大小。
    的頭像 發(fā)表于 12-24 18:03 ?563次閱讀

    oracle-C#使用方法

    oracle-C#使用方法(電源技術(shù)指標包括電源效率)-該文檔為oracle-C#使用方法講解文檔,是一份還算不錯的參考文檔,感興趣的可以下載看看
    發(fā)表于 09-28 09:38 ?6次下載
    oracle-<b class='flag-5'>C</b>#<b class='flag-5'>使用方法</b>

    現(xiàn)代C++之模板類型推導

    傳統(tǒng)C++中,參數(shù)的類型都必須明確定義,這其實對我們快速進行編碼沒有任何幫助,尤其是當我們面對一大堆復雜的模板類型時,必須明確的指出變量的類型才能進行后續(xù)的編碼,這不僅拖慢我們的開發(fā)效
    的頭像 發(fā)表于 03-02 16:18 ?824次閱讀

    C++學習筆記之c++的基本認識

    自這篇文章我們即將開始C++的奇幻之旅,其內(nèi)容主要是讀C++ Primer的總結(jié)和筆記,有興趣可以找原版書看看,對于學習C++還是有很大幫助的。這篇文章將從一個經(jīng)典的程序開始介紹C++
    的頭像 發(fā)表于 03-17 13:57 ?691次閱讀

    C++的引用和指針

    之前的文章我們已經(jīng)介紹了C++中的基本類型如int,bool和double等,除了基本類型C++還有一些更復雜的數(shù)據(jù)類型復合
    的頭像 發(fā)表于 03-17 14:00 ?599次閱讀

    C++中實現(xiàn)類似instanceof的方法

    函數(shù),可實際上C++中沒有。但是別著急,其實C++中有兩種簡單的方法可以實現(xiàn)類似Java中的instanceof的功能。 在 C++ 中,確定對象的
    的頭像 發(fā)表于 07-18 10:16 ?509次閱讀
    <b class='flag-5'>C++</b>中實現(xiàn)類似instanceof的<b class='flag-5'>方法</b>