1. decltype
decltype
的使用方式如下:
decltype(expression) var;
關鍵字decltype
的作用是將變量的類型聲明為表達式指定的類型。即將var
的類型聲明為expression
指定的類型。編譯器在處理decltype
的時候,實際上需要對expression
進行一個核對,然后才能確定var
的類型。其流程和核對規則大致如下:
- 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
是一個函數的調用,則var
的類型與函數的返回值類型相同。 例如:
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)就已經確認了,所以走不到步驟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新增加了一種函數聲明的語法:在函數名和參數后面指定返回類型。該語法與auto
搭配使用,其使用形式如下所示:
auto fun(int a, int b) - > int
該語法主要是為了解決某些模板函數返回值類型問題,例如下面這個模板函數:
template< typename T, typename U >
??? fun(T t, U u)
{
...
return t + u;
}
該模板函數的返回值如何確定呢?首先很容易想到的是將decltype(t+u)
設置為該模板函數的返回值,但是不行的是,此時還未聲明x
和y
,編譯器還識別不到他們,更無法使用他們,因此,C++11新增了返回值類型后置的這種語法,針對上述的模板函數,使用新增的語法可以寫為:
template< typename T, typename U >
auto fun(T t, U u) - > decltype(t + u) //此時decltype在參數t和u聲明的后面,可以正常使用他們
{
...
return t+u;
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。
舉報投訴
-
C++語言
+關注
關注
0文章
147瀏覽量
6989 -
gcc編譯器
+關注
關注
0文章
78瀏覽量
3381
發布評論請先 登錄
相關推薦
C++標準庫學習筆記重點
in each C++versionvector;//OK since C++113.以auto聲明的變量,其類型會根據初值被自動推導出來。auto i=42;//i has type intvector
發表于 10-23 20:28
學習C++的方法以及C++的就業方向
學習方向:嵌入式+人工智能嵌入式是一門技術學習目標1.嵌入式開發概述;(面向對象在嵌入式開發中角色)2.嵌入式Linux C++編程;(C++概述、C++學習方法、
發表于 12-24 07:32
turbo c 2.0使用說明,使用方法,使用指南
turbo c 2.0使用說明,使用方法
在開始看本文以前,我先說明一下C語言的安裝和使用中最應該注意的地方:許多網友在下載Turbo C 2.0和Turbo
發表于 09-18 09:51
?3321次閱讀
C++內存泄漏分析方法
C++是一種非常流行的計算機編程語言,在使用的過程中容易出現內存泄漏問題,而該問題往往難以識別。給出了一種對C++內存泄漏問題進行分析的方法,該方法得到
發表于 11-23 11:19
?5次下載
VISUAL C++教程之VISUAL C++的安裝和使用方法
本文檔的主要內容詳細介紹的是VISUAL C++教程之VISUAL C++的安裝和使用方法資料免費下載。
發表于 12-27 16:32
?19次下載
Visual C++教程之C++的語言資料概述免費下載
本文檔詳細介紹的是Visual C++教程之C++的語言資料概述免費下載主要內容包括了:1 從C到C++的程序結構 ,2 程序書寫規范,3 數據類型
發表于 02-15 15:59
?3次下載
oracle-C#使用方法
oracle-C#使用方法(電源技術指標包括電源效率)-該文檔為oracle-C#使用方法講解文檔,是一份還算不錯的參考文檔,感興趣的可以下載看看
發表于 09-28 09:38
?6次下載
現代C++之模板類型推導
傳統C++中,參數的類型都必須明確定義,這其實對我們快速進行編碼沒有任何幫助,尤其是當我們面對一大堆復雜的模板類型時,必須明確的指出變量的類型才能進行后續的編碼,這不僅拖慢我們的開發效
C++學習筆記之c++的基本認識
自這篇文章我們即將開始C++的奇幻之旅,其內容主要是讀C++ Primer的總結和筆記,有興趣可以找原版書看看,對于學習C++還是有很大幫助的。這篇文章將從一個經典的程序開始介紹C++
評論