c++裡在獲取乙個表示式的資料型別的時候。就是使用decltype()來獲取。下面介紹下它的一些特性:
1.延遲性
decltype(f()) sum = x;
sum 的資料型別是函式f()的返回型別。但是,這得需要f()執行結束(ps:與auto不同,這裡不實際計算結果)。
decltype 處理頂層const和引用的方式與auto有些不同, auto會忽略,但是decltype()不會。例如:
const int ci = 0, &cj = ci;
deltype(ci) x = 0; ---------x的資料型別是const int
decltype(cj) y = x; -------------y 的資料型別是const int&. y引用了x。
2.decltype()和引用的組合。
-------------如果變數不是乙個普通的表示式,那麼decltype()返回的是對應結果的資料型別。
-------------如果表示式裡有解引用符,那麼decltype()的結果將是引用型別。
-------------如果表示式在一層或多層括號()內,那麼decltype()的結果將是引用型別。
例如:int i = 10, *p = &i, &r = i;
decltype(r + 0) b;-----------加法的結果是int, b是int 型別。
decltype(*p) c = 20;--------c是int&。因為表示式裡有解引用符。
decltype((i)) d = 10;---------d的資料型別是整型引用int&。
ps: 和auto對比?
int a = 3;
auto c1 = a; c1的資料型別是int
decltype(a) c2 = a; c2的資料型別是int
decltype((a)) c3 = a; c3的資料型別是int&
const int d = 5;
auto f1 = d; f1的資料型別是int
decltype(d) f2 = d; f2的資料型別是const int
C 之decltype和auto的用法
返回值 decltype 表示式 1 當表示式返回右值,則decltype返回該表示式的型別 2 當表示式返回左值,則decltype返回該表示式的左值引用型別 注 auto的用法 1 自動型別推斷 templatet,class u void myfunc t t,u u 2 返回值佔位。函式模板...
c 中auto和decltype的區別
c 11中引入了auto型別說明符,用它就能讓編譯器替我們去分析表示式所屬的型別,auto讓編譯器通過初始化值來推算變數的型別。如 auto item vall val2 此處編譯器將根據vall和val2相加的結果來推斷item的型別,假如vall和val2的型別是double,則item的型別就...
C 中decltype的使用方法
decltype是c 11中引入的新的型別說明符。編譯器根據分析表示式或者函式返回值來分析其型別,但是需要注意的是,在分析型別的過程中,不執行函式或者表示式。int i 0 decltype i j i 此時,j的型別是int,並且i和j的值都是0。當表示式是常量表示式時,decltype會返回表示...