C++的decltype()的介绍
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()的介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: apache+Tomcat均衡负载配置
- 下一篇: C++迭代器失效的几种情况总结