亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++ decltype類型說明符

2020-05-23 14:07:18
字體:
供稿:網(wǎng)友
在C++中,decltype作為操作符,用于查詢表達式的數(shù)據(jù)類型。decltype在C++11標準制定時引入,主要是為泛型編程而設計,以解決泛型編程中,由于有些類型由模板參數(shù)決定,而難以(甚至不可能)表示之的問題。
 

1 基本語法

decltype 類型說明符生成指定表達式的類型。在此過程中,編譯器分析表達式并得到它的類型,卻不實際計算表達式的值。

語法為:

decltype( expression )

編譯器使用下列規(guī)則來確定expression 參數(shù)的類型。

如果 expression 參數(shù)是標識符或類成員訪問,則 decltype(expression) 是 expression 命名的實體的類型。如果不存在此類實體或 expression 參數(shù)命名一組重載函數(shù),則編譯器將生成錯誤消息。
如果 expression 參數(shù)是對一個函數(shù)或一個重載運算符函數(shù)的調(diào)用,則 decltype(expression) 是函數(shù)的返回類型。將忽略重載運算符兩邊的括號。
如果 expression 參數(shù)是右值,則 decltype(expression) 是 expression類型。如果 expression參數(shù)是左值,則 decltype(expression) 是對 左值引用 類型的expression。
給出如下示例代碼:

int var;const int&& fx(); struct A { double x; }const A* a = new A();

語句 類型 注釋
decltype(fx()); const int && 對左值引用的const int
decltype(var); int 變量 var 的類型
decltype(a->x); double 成員訪問的類型
decltype((a->x)); const double& 內(nèi)部括號導致語句作為表達式而不是成員訪問計算。由于a聲明為 const指針,因此類型是對const double的引用。

2 decltype和引用

如果decltype使用的表達式不是一個變量,則decltype返回表達式結(jié)果對應的類型。但是有些時候,一些表達式向decltype返回一個引用類型。一般來說,當這種情形發(fā)生時,意味著該表達式的結(jié)果對象能作為一條賦值語句的左值:

// decltype的結(jié)果可以是引用類型int i = 42, *p = &i, &r = i;decltype(r + 0) b; // OK, 加法的結(jié)果是int,因此b是一個(未初始化)的intdecltype(*p) c; // Error, c是int&, 必須初始化

因為r是一個引用,因此decltype(r)的結(jié)果是引用類型,如果想讓結(jié)果類型是r所指的類型,可以把r作為表達式的一部分,如r+0,顯然這個表達式的結(jié)果將是一個具體的值而非一個引用。

另一方面,如果表達式的內(nèi)容是解引用操作,則decltype將得到引用類型。正如我們所熟悉的那樣,解引用指針可以得到指針所指對象,而且還能給這個對象賦值,因此,decltype(*p)的結(jié)果類型是int&而非int。

3 decltype和auto

處理頂層const和引用的方式不同(參考閱讀:C++ auto類型說明符)
如果decltype使用的表達式是一個變量,則decltype返回該變量的類型(包括頂層const和引用在內(nèi)):

const int ci = 0, &cj = ci;decltype(ci) x = 0; // x的類型是const intdecltype(cj) y = x; // y的類型是const int&,y綁定到變量xdecltype(cj) z; // Error, z是一個引用,必須初始化

decltype的結(jié)果類型與表達式形式密切相關(guān)

對于decltype所用的引用來說,如果變量名加上了一對括號,則得到的類型與不加括號時會有所不同。如果decltype使用的是一個不加括號的變量,則得到的結(jié)果就是該變量的類型;如果給變量加上了一層或多層括號,編譯器就會把它當成是一個表達式。

decltype((i)) d; // Error, d是int&, 必須初始化decltype(i) e;  // OK, e是一個未初始化的int

模板函數(shù)的返回類型 

在 C++11 中,可以結(jié)合使用尾隨返回類型上的 decltype 類型說明符和 auto 關(guān)鍵字來聲明其返回類型依賴于其模板參數(shù)類型的模板函數(shù)。
在 C++14 中,可以使用不帶尾隨返回類型的 decltype(auto) 來聲明其返回類型取決于其模板參數(shù)類型的模板函數(shù)。
例如,定義一個求和模板函數(shù):

//C++11 template<typename T, typename U>auto myFunc(T&& t, U&& u) -> decltype (forward<T>(t) + forward<U>(u))     { return forward<T>(t) + forward<U>(u); };//C++14template<typename T, typename U>decltype(auto) myFunc(T&& t, U&& u)     { return forward<T>(t) + forward<U>(u); };

(forward:如果參數(shù)是右值或右值引用,則有條件地將其參數(shù)強制轉(zhuǎn)換為右值引用。)

附上一段源碼:

#include <iostream>#include <string>#include <utility>#include <iomanip>using namespace std;template<typename T1, typename T2>auto Plus(T1&& t1, T2&& t2) ->   decltype(forward<T1>(t1) + forward<T2>(t2)){  return forward<T1>(t1) + forward<T2>(t2);}class X{  friend X operator+(const X& x1, const X& x2)  {   return X(x1.m_data + x2.m_data);  }public:  X(int data) : m_data(data) {}  int Dump() const { return m_data;}private:  int m_data;};int main(){  // Integer   int i = 4;  cout <<    "Plus(i, 9) = " <<    Plus(i, 9) << endl;  // Floating point  float dx = 4.0;  float dy = 9.5;  cout <<     setprecision(3) <<    "Plus(dx, dy) = " <<   Plus(dx, dy) << endl;  // String     string hello = "Hello, ";  string world = "world!";  cout << Plus(hello, world) << endl;  // Custom type  X x1(20);  X x2(22);  X x3 = Plus(x1, x2);  cout <<    "x3.Dump() = " <<    x3.Dump() << endl;}

運行結(jié)果為:

Plus(i, 9) = 13Plus(dx, dy) = 13.5Hello, world!x3.Dump() = 42


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
2024最新电影在线免费观看| 最近在线中文字幕| 成人在线免费公开观看视频| 亚洲综合第一页| 男人的天堂一区| 成人影视免费观看| 国产精品无码一区二区三区| 国产精欧美一区二区三区蓝颜男同| 五月六月丁香婷婷| 国产精品无码在线播放| 狂野欧美一区| 国产精品天干天干在观线| 日韩av最新在线| 国产精品亚洲欧美在线播放| 午夜免费在线观看精品视频| 日本少妇毛茸茸| 2024亚洲男人天堂| 国产精品无码久久av| 国产亚洲成av人片在线观看桃| 午夜啪啪免费视频| 日本一本在线观看| 日本在线视频播放| 91在线超碰| 亚洲精品护士| 成人av播放| 亚洲国产综合在线观看| 欧美成人a在线| 91性高潮久久久久久久| 国产又黄又粗又猛又爽| 国产精品久久久久久| 日韩欧美一起| 欧美精品一区二区成人| 91亚洲精华国产精华| 欧美aaaaaaaa| 亚洲一区二区三区日韩| 久久精品无码一区二区三区毛片| 无人区在线高清完整免费版 一区二| 成人福利电影| 99精品视频免费全部在线| 久久久久久欧美精品色一二三四| 欧美三级网色| 欧美国产精品一区| 午夜精品一区二区三区视频免费看| 蜜桃欧美视频| 最新中文字幕免费| 精品国产无码一区二区三区| 爱福利视频一区| 日韩av高清| 国产探花一区二区三区| 波多野结衣国产精品| 亚洲电影小说图| 国产精品三级网站| 最新黄色网址在线观看| 国产在线视频资源| 中国老头性行为xxxx| 亚洲v中文字幕| 久久亚洲精品中文字幕蜜潮电影| 欧美福利一区| 精品国产91亚洲一区二区三区婷婷| 国产欧美一区二区视频| 黄网站免费在线| 一区二区91美女张开腿让人桶| 久久久国产精品午夜一区ai换脸| 国产美女永久无遮挡| 无码人妻丰满熟妇区96| 51精品免费网站| 成人免费视屏| 91免费综合在线| 777午夜精品视频在线播放| 日产乱码一卡二卡三免费| 少妇一级淫免费观看| www.噜噜色.com| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 欧美一区高清| 成人国产亚洲精品a区天堂华泰| 欧美日韩国产色站一区二区三区| 精品自拍视频在线观看| 成人做爰69片免网站| 三级理论午夜在线观看| 国产欧美高清视频在线| 国产精品综合久久| 中文字幕在线亚洲精品| 精品一性一色一乱农村| 久久久精品亚洲| 日韩伦理在线视频| 日本免费黄网站| 久久影院午夜精品| 先锋影音国产一区| 日韩av三级在线观看| 粉嫩av四季av绯色av第一区| 国模gogo一区二区大胆私拍| 久久精品色播| 国产精品少妇自拍| 欧美日韩综合视频| www.国产成人| 欧美精品一区二区蜜臀亚洲| 91精品美女| 欧美特级xxxxbbbb毛片| 国产欧美啪啪| 亚洲成a人v欧美综合天堂下载| 日本在线播放不卡| 97aⅴ精品视频一二三区| 欧美日韩精品电影| 亚洲综合久久久久| 99久久影视| 日韩精品欧美一区二区三区| 亚洲91av视频| 在线视频1区| 久久久久久色| 精品福利一区二区三区免费视频| 亚洲r级在线观看| 欧美性感美女h网站在线观看免费| 男人插女人下面免费视频| 一区二区三国产精华液| 97久久人人超碰caoprom欧美| 上原亚衣加勒比在线播放| 国产最新自拍视频| 视频一区二区视频| 久热精品视频在线| 国产精品福利网站| 欧美日韩国产免费| 伊人久久久大香线蕉综合直播| 亚洲天堂网中文字| 中文字幕国产高清| 一区二区三区四区高清精品免费观看| √新版天堂资源在线资源| 亚洲综合日韩在线| 欧美激情一区在线观看| 最近2018年手机中文在线| 日日摸天天爽天天爽视频| 老司机精品视频导航| 欧美一区二区三区视频在线| 小次郎av收藏家| 久久亚洲国产精品一区二区| 亚洲av无码乱码在线观看性色| 久久尤物视频| 国产日韩精品一区二区| 人人澡人人透人人爽| gogo在线高清视频| 在线视频国产三级| av影院在线免费观看| 制服.丝袜.亚洲.中文.综合懂| 老司机精品福利在线观看| 久久不射影院| 亚洲欧洲美洲在线综合| 伊人久久大香线蕉综合影院首页| 色老综合老女人久久久| 国内国产精品久久| 国产福利免费在线观看| 精品视频黄色| 色综合色综合色综合色综合| 久久久久电影| 欧美污在线观看| av成人免费网站| 精品少妇一区二区三区日产乱码| 国产乱码精品一区二区亚洲| 国产精品免费视频一区二区三区| 国产综合色在线视频区| 羞羞色院91蜜桃| 国产精品日韩精品欧美在线| www.-级毛片线天内射视视| 91精品国产高清久久久久久91| 免费av在线播放| 日韩精彩视频在线观看| 亚洲av综合色区无码另类小说| 在线综合视频| 亚洲一区视频在线播放| 公交车强行挺进岳身体| 奇米成人av国产一区二区三区| 中文字幕av中文字幕| 在线观看国产精品日韩av| 国产精品久久久久久久久久久久午夜片| 中文字幕不卡免费视频| 中文字幕+乱码+中文字幕明步| 一本一本久久a久久精品综合小说| 97se亚洲| 亚洲成人第一区| 国产亚洲视频中文字幕视频| 成人亚洲精品| 日本三级一区二区三区| 99在线视频影院| 久久国产福利国产秒拍| av网页在线| 第九区2中文字幕| av网站免费在线观看| 国内外免费激情视频| 久久蜜桃av| 国产精品揄拍100视频| 四虎永久在线精品免费一区二区| 天天操天天射天天插| 国产欧美日韩综合精品| 中文字幕xxxx| 日韩美女毛茸茸| 久久天堂av综合合色| 色一情一乱一伦一区二区三欧美| aaa一区二区三区| 日本10禁啪啪无遮挡免费一区二区| 精品人妻一区二区三区含羞草| 亚洲国产清纯| 日韩大尺度黄色| 曰本三级日本三级日本三级| 午夜免费一区二区| www.eeuss影院| 能在线观看的av网站| 99久久99久久综合| 性欧美gay| 精品综合在线| 天天干天天干天天干天天| 深夜福利av你懂的| 亚洲高清网站| 欧洲猛交xxxx乱大交3| 日韩二区三区四区| 亚洲av无码专区在线| 伊人久久一区二区| 国产麻豆麻豆| 免费成人在线视频网站| 亚洲成人免费电影| 草莓视频丝瓜在线观看丝瓜18| 18岁以下禁止观看的美女视频| 国产乱码精品一区二区三区亚洲人| 97成人超碰视| 黄色国产网站在线观看| av影院在线| 国产精品毛片一区二区在线看舒淇| 色哟哟亚洲精品一区二区| 久久精品国产99久久6| 精品久久久影院| 81精品国产乱码久久久久久| 高清一区二区三区视频| 91传媒视频在线观看| caoporn成人| 午夜成人影视| 久久免费大视频| 国产高清视频在线播放| 国产精品无码在线| 久久久久久欧美| 国产成人麻豆免费观看| 欧美激情网站在线观看| 国产日本一区二区三区| www.久久热.com| 五月天婷婷综合社区| 国产精品久久久久无码av| 欧美日本韩国一区二区三区视频| 国产欧美日韩丝袜精品一区| 香蕉视频xxx| 大又大又粗又硬又爽少妇毛片| 国语自产精品视频在免费| 欧美福利网址| heyzo高清在线| 高清成人免费视频| 国产精品国产精品国产专区蜜臀ah| 一区二区精彩视频| 久久综合久久美利坚合众国| 网站黄色在线观看| 国产福利av网站| 在线免费一区| 亚洲伊人久久综合| 日漫免费在线观看网站| 日韩av资源网| 欧美日夜夜逼| 91精品国产91久久久久久最新| 蜜桃在线一区二区三区| 亚洲激情av在线| 成人污污www网站免费丝瓜| 亚洲国产黄色| 成人免费黄色在线| 欧美伊人久久大香线蕉综合69| 亚洲免费精品视频| 日本免费网站| 爱爱永久免费视频| 中文字幕免费在线观看视频一区| 国产欧美日韩另类一区| 亚洲精品精品一区| 色哟哟日韩精品| 欧美日韩在线播放三区| 日韩欧美中文字幕视频| 精品亚洲一区二区三区| 本田岬高潮一区二区三区| 色婷婷av一区二区三区大白胸| 嫩草www视频在线观看高清| 日本免费一区二区视频| 欧美激情综合五月色丁香小说| 精品无人乱码一区二区三区| 色欧美自拍视频| 国产一区二区三区免费看| 蜜桃麻豆www久久国产精品| 欧美精品 - 色网| 高清日韩中文字幕| 国产一区二区高清| 亚洲成人a级片| 捷克做爰xxxⅹ性视频| 另类的小说在线视频另类成人小视频在线| 亚洲av色香蕉一区二区三区| 成人免费视频观看视频| eeuss影院一区二区三区| 精品国产乱码久久久久久久久| 精品国产18久久久久久二百| 激情视频免费| 99国产精品久久久久久久成人| 三上悠亚作品在线观看| 吞精囗交69激情欧美| 四色永久网址| 男人扒开美女尿口无遮挡图片| 精品欧美一区二区久久久| 国产黄色片在线免费观看| 狠狠爱www人成狠狠爱综合网| 成人激情免费电影网址| 中文字幕在线视频播放| 亚洲精品aaa| 福利一区视频| 亚洲欧美在线免费| 久久99国产精品成人| 欧美视频二区36p| 一区二区中文字幕在线| 亚洲 欧洲 日韩| 不卡一本毛片| 日韩视频在线你懂得| 亚洲视频手机在线观看| av网站免费在线播放| 在线亚洲a色| 日韩一区免费| 欧美激情免费| 高清一区二区三区日本久| 久久久久久久9999| 欧美一卡二卡在线观看| 日本人妻丰满熟妇久久久久久| 久久91精品| 中文字幕一区免费在线观看|