C++11:decltype型別推導及追蹤返回值型別
阿新 • • 發佈:2019-01-12
C++11:decltype型別推導及追蹤返回值型別
使用decltype
進行自動型別推導
先看一段cppreference
上面的解釋:decltype 指定符
可以看下面的一段程式碼:
#include <bits/stdc++.h>
using namespace std;
struct
{
char *name;
} anon_u;
struct
{
int d;
decltype(anon_u) id; //沒有告訴id的型別,用decltype自動推導
} anon_s[100]; //匿名的struct陣列
int main()
{
decltype(anon_s) as;//注意 as 的型別。
return 0;
}
再這段程式碼裡面,首先定義了一個匿名的結構體anon_u
,然後又定義了一個新的匿名結構體,其中有一個成員id
,這時候並沒有給它指明型別,而是讓編譯器自己去推導,指定id
的型別為anon_u
代表的這個型別。起到了重用匿名結構體的作用。
比如以下程式碼可以更容易的看出decltype
關鍵字的作用。
int a = 6;
decltype(a) c;//把c定義成a這個變數的型別
c = 21;
cout << c << endl;
泛型程式設計中結合auto,用於追蹤函式的返回值型別
這也是decltype
最大的用途了。
template <typename _Tx, typename _Ty>
auto multiply(_Tx x, _Ty y)->decltype(_Tx*_Ty)
{
return x*y;
}
追蹤返回型別的函式
作用是:可以將返回型別的宣告資訊放到函式引數列表的後面進行宣告。如:
普通函式宣告方式:
int func(char *ptr,int val);
追蹤返回型別的函式宣告:
auto func(char *ptr.int val)->int;
追蹤返回型別在原本函式返回值的位置使用auto
這個方法配合上面講的泛型程式設計中結合auto,用於追蹤函式的返回值型別,可以對程式開發靈活性有比較大的提高。