感性認識跟?auto?一樣
創新互聯是創新、創意、研發型一體的綜合型網站建設公司,自成立以來公司不斷探索創新,始終堅持為客戶提供滿意周到的服務,在本地打下了良好的口碑,在過去的十載時間我們累計服務了上千家以及全國政企客戶,如純水機等企業單位,完善的項目管理流程,嚴格把控項目進度與質量監控加上過硬的技術實力獲得客戶的一致表揚。auto a = 1;
但?decltype?是這樣用
decltype(表達式) a = 值;
// 例如
decltype(1) a = 2;
decltype("ss") str = "123";
auto a = 20;
decltype(a) b = 30;
大概就是根據 decltype()?括號里面表達式推導出相應的類型,至于與?auto?的不同點,先不用去比較它,初認識的時候會混淆,需要用的時候查查就好了。
2、decltype?括號里的推導規則是怎么樣子的呢略......去查吧,我也很頭疼。
3、decltype?實際用途這里舉一個常用的例子
這種函數很常見吧,有也就返回 2?個數相加的結果
int add(int a, int b)
{
return a + b;
}
這時候你可能會想到,我要是用浮點類型的咋辦,這時候你會用重載的方式再寫一次
double add(double a, double b)
{
return a + b;
}
好像解決了一點,就是代碼量多了一丟丟,后面翻查資料發現,模板也能解決這個問題,而且代碼量少一丟丟
templateT add(T a, T b)
{
return a + b;
}
寫完感覺很nice,什么整型浮點型啥的都不是問題。這時候可能有個S(介于A與C之間的)的需求說:我想要整型和浮點型相加的結果;
然后就開始著手寫。思緒良久也寫出了一個跟上邊一樣的模板
templateT1 add(T1 a, T2 b)
{
return a + b;
}
這時候我就懵逼逼了,add?的返回值是到底是?T1 還是 T2 呢。真不知如何下手啊,這個還是簡單數據類型,要是復雜一點的數據類型那不就得刪庫跑路了。
那能不能讓編譯器自動推導呢,答案是有的,那今天我們的主角就登場了、
templateauto add(T1 a, T2 b)->decltype(a + b)
{
return a + b;
}
完整代碼
#includeusing namespace std;
templateauto add(T1 a, T2 b)->decltype(a + b)
{
return a + b;
}
int main(int argc, char* argv[])
{
cout<< add(1, 2.14)<< endl;
return 0;
}
調試結果:3.14
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站名稱:C++11decltype的用法粗解-創新互聯
鏈接地址:http://vcdvsql.cn/article46/egheg.html
成都網站建設公司_創新互聯,為您提供虛擬主機、關鍵詞優化、網站維護、電子商務、營銷型網站建設、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯