decltype(expression)是一个标识符或者表达式的数据类型的推断,它可以用在变量声明中作为变量的数据类型。decltype类型说明符常常和auto关键字一起用于模板库的开发。

语法

decltype( expression )

类型推断规则

例子

int var;
const int&& fx(); 
struct A { double x; }
const A* a = new A();
表达式 类型 说明
decltype(var) int 返回变量标识符的类型
decltype(fx()) const int&& 返回函数调用的返回类型
decltype((*a)) const A& 表达式是左值,返回左值引用类型
decltype(a->x) double 表达式是类成员访问,返回类成员对象的类型
decltype((a->x)) const double& 内部表达式加上括号后,成为计算的表达式,而不是类成员访问;a是const指针,因此返回类型是const double&

关于延迟指定函数返回类型惯用法

有时候函数的返回类型依赖于模板参数,这时可以借助于auto的延迟指定函数返回值的功能,常用于模板函数的定义中。

如:

template< typename T, typename U >
auto func(T t, U u) -> typename MaxType<T,U>::type
{
    // ...
}

参考