C++返回類型後置

C++返回類型後置

[參考]http://blog.csdn.net/fjb2080/article/details/7527349/http://blog.csdn.net/zwvista/article/details/5472096/

decltype是C++0x所引入的用於提取表達式類型的新關鍵字,其語法形式爲:decltype(expression) 。這種語法形式在C++0x草案中被稱爲decltype類型指示符。

根據C++0x最終草案,decltype(e)所提取的類型由以下規則決定: 
如果e是一個沒有外層括弧的標識符表達式或者類成員訪問表達式,那麼decltype(e)就是e所命名的實體的類型。 
如果e是一個函數調用或者一個重載操作符調用(忽略e的外層括弧),那麼decltype(e)就是該函數的返回類型。 
否則,假設e的類型是T:若e是一個左值,則decltype(e)就是T&;若e是一個右值,則decltype(e)就是T。 
比如, 
int a; 
int f(void); 
decltype(a) x1 = a; //相當於 int x1 = a;(規則1,e是標識符) 
decltype(f()) x2 = a; //相當於 int x2 = a;(規則2,e是函數調用) 
decltype((a)) x3 = a; //相當於 int& x3 = a;(規則3,e是左值) 
decltype(a+1) x4 = a; //相當於 int x4 = a;(規則3,e是右值)

注意:decltype(e)中的操作數e僅用於推導類型,編譯器不會計算e的值。

C++11的解決辦法是將返回類型放在它所屬的函數名的後面:

template<class T, class U>
auto mul(T x, U y) -> decltype(x*y)
{
    return x*y;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章