1.decltype關鍵字獲取表示式的型別
int x = 0;
decltype(x) y = 1; //y -> int
2.推導規則decltype(exp)
int n = 0;
volatile
const
int & x = n;
decltype(n) a = n; //a -> int
decltype(x) b = n; //b -> const volatile int &
const
int& fun_cint_r(void); //左值
const
int fun_cint(void); //純右值
const foo fun_cfoo(void); //純右值
int x = 0;
decltype(fun_cint_r()) a1 = x; //a1 -> const int &
decltype(fun_cint()) a2 = 0; //a2 -> int &
decltype(fun_cfoo()) a3 = 0; //a3 -> const foo
注意:按照規則,decltype的結果和函式的返回值型別保持一致。a2是int而不是const int. 而是因為函式返回的是乙個純右值,對於純右值而言,只有類型別可以攜帶cv限定符如a3,此外一般忽略掉cv限定符。
int n = 0, m = 0;
decltype(n + m) c = 0; //c -> int 左值
decltype(n += m) d = c; //d -> int & 純右值
3.返回型別後置語法
#include
#include
using
namespace
std;
template
auto add(t t, u u) -> decltype(t + u)
int& foo(int& i)
float foo(float& f)
template
auto func(t& val) -> decltype(foo(val))
int main()
學習文獻:
《深入應用c++11》
C 11特性 decltype關鍵字
我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...
C 11特性 decltype關鍵字
我們之前使用的typeid運算子來查詢乙個變數的型別,這種型別查詢在執行時進行。rtti機制為每乙個型別產生乙個type info型別的資料,而typeid查詢返回的變數相應type info資料,通過name成員函式返回型別的名稱。同時在c 11中typeid還提供了hash code這個成員函式...
C 11的decltype關鍵字
decltype關鍵字和auto有異曲同工之處 有時我們希望從表示式的型別推斷出要定義的變數型別,但是不想用該表示式的值初始化變數 如果要初始化就用auto了 為了滿足這一需求,c 11新標準引入了decltype型別說明符,它的作用是選擇並返回運算元的資料型別,在此過程中,編譯器分析表示式並得到它...