C 11基礎 decltype關鍵字

2021-08-08 18:18:13 字數 1288 閱讀 5025

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型別說明符,它的作用是選擇並返回運算元的資料型別,在此過程中,編譯器分析表示式並得到它...