decltype

C++11 关键字 decltypedecltype(expression)

decltype 可以用于获取变量或表达式的类型

1
2
int x = 0;
decltype(x) y = 1;

除此之外,在 函数模版 中有很大的作用

1
2
3
4
5
6
7
template<typename T1, typename T2>
void ft(T1 x, T2 y)
{
...
?type? xpy = x + y;
...
}

这种情况我们无法判断 x+y 需要返回什么类型,使用 decltype 就能够解决这个问题

1
2
3
4
5
6
7
template<typename T1, typename T2>
void ft(T1 x, T2 y)
{
...
decltype(x + y) xpy = x + y;
...
}

特殊例子

1
2
double x = 4.4;
decltype((x)) r = x; // r is double &

此时 expression 为 (x),所以 r 的类型是 double 类型的引用

函数返回数组

1
2
3
4
5
6
7
int odd[] = {1,3,5,7,9};
int even[] = {0,2,4,6,8};
// returns a pointer to an array of five int elements
decltype(odd) *arrPtr(int i)
{
return (i % 2) ? &odd : &even; // returns a pointer to the array
}