decltype

選擇並返回操作數的數據類型。編譯器分析表達式並得到它的類型,卻不實際計算表達式的值。

當調用的是函數時,編譯器並不實際調用函數,而是使用當調用發生時函數的返回值類型作爲定義參數的類型。

decltype使用的表達式是一個變量,則返回該變量的類型(包括頂層const和引用)。

如果使用的的表達式不是變量,則返回表達式結果對應的類型,

表達式的內容是解引用操作,得到的是引用類型。

int a = 1, *pa = &a, &b = a;
decltype(b) c = a;    // c是int&,即引用
decltype(b+0) d = a;  // d是int,因爲加法結果是int
decltype(*pa) e = a;  // e是int&,且必須初始化

decltype本身有一層括號,這是得到的是該變量的類型,若多加一層或多層括號,編譯器就將把它當成表達式。可以理解爲,雙層括號永遠是引用。

int a = 1;
decltype(a) b;        // b類型爲int
decltype((a)) c;      // c類型爲int&,即一個引用類型,必須初始化。
int &d = a;
decltype(d) e = a;    // e類型爲int&

 

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