標籤:

c++ primer 第五版關於decltype的一個問題?

這裡說decltype(i)是一個int,這個說法是否有問題?不應該是int嗎?


這裡確實有問題,decltype(i)確為int。

找了一下中文版的書,這段內容在628-629頁,英文的711頁。

C++ Primer本身對於decltype的介紹在2.5.3節,其中有一個WARNING:

切記:decltype((variable))(注意是雙層括弧)的結果永遠是引用,而decltype(variable)的結果只有當variable本身就是一個引用的時候才是引用。

decltype的標準定義寫在[dcl.type.simple],或者cppref上也有完全符合標準的中文解釋。

decltype(e)

...

if e is an unparenthesized id-expression or an unparenthesized class member access, decltype(e) is the type of the entity named by e.

簡言之,聲明是什麼類型就是什麼類型。


和樓上的說法一致@庄森

#include &
using namespace std;

template&
struct rmv_reference{
typedef T type;
};

template&
struct rmv_reference&{
typedef T type;
};

template&
struct rmv_reference&{
typedef T type;
};

int main(){
int i=101;
rmv_reference&::type a;
rmv_reference&::type b;
rmv_reference&::type c;

return 0;
}

這大概就是標準庫remove_reference模板類型的實現。

參考c++ primer 5th 中文版 p62,p628.


推薦閱讀:

用一年時間如何能掌握 C++ ?
為什麼現代CFD和PIC模擬大量採用C++編寫?針對這些模擬C++相對於C的優勢在哪?
C++ 是 2012 年不宜進入的技術點嗎?
C++ 研發實習生面試通常會被問到什麼問題?

TAG:C | CPrimer |