C++11關(guān)鍵字decltype

在C++泛型編程中,經(jīng)常會(huì)使用到模板,但是模板在使用時(shí),可能會(huì)出現(xiàn)不知道應(yīng)該聲明是什么類型的狀況

template<typename T1,typename t2>
void  fun(T1 a,T2 b)
{
    ?type? aplusb=a+b;
}

在上敘情況中,我們事先并不知道aplusb的類型,無法對(duì)其進(jìn)行聲明。
但是C++11中新增加的關(guān)鍵字decltype解決了這個(gè)問題

int x;
decltype(x) y;

這使得y的類型與x相同,decltype可以是表達(dá)式,函數(shù)調(diào)用等等
例如

int fun1(a){return a;}
decltype (fun1) x;//令x類型與fun1的返回類型相同
------------------------------------
int x;
double y;
decltype(x+y) xpy;//令xpy類型與x+y相同

C++后置返回類型

template<typename T1,typename t2>
 ?type? fun(T1 a,T2 b)
{
    return a+b;
}

由于在提供返回類型之前,還未聲明變量a,b所以無法對(duì)返回類型設(shè)置為decltype(a,b)
這時(shí)候在C++11中提供了一個(gè)解決方案,就是后置返回類型

template<typename T1,typename t2>
auto fun(T1 a,T2 b) -> decltype(a+b)
{
    return a+b;
}

這個(gè)函數(shù)模板的返回類型即為decltype(a+b)
這在實(shí)際的泛型編程中非常有用,如果一開始未知要返回什么類型,先設(shè)置返回類型為auto再在后面->type(expression),這就可以解決很大一部分的問題。

文章摘取自C++PrimerPlus第六版 8.5.6
P.S 最近在討論項(xiàng)目和看namespace的事,就拿了第八章的這個(gè)decltype關(guān)鍵字來寫,decltype算是最近學(xué)的東西里面和實(shí)際代碼中關(guān)系比較大的東西了吧。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容