decltype被称为类型说明符,它的作用是选择并返回操作数的数据类型
// sum的类型就是函数f返回的类型
decltype(f()) sum = x
工作原理
decltype并不会实际计算表达式的值,编译器分析表达式并得到它的类型
函数调用也算一种表达式,因此不必蛋心在使用decltype是执行了函数。
decltype+变量
const int ci = 0, &cj = ci;
// x的类型是const int
decltype(ci) x = 0;
// y的类型是const int &
decltype(cj) y = x;
decltype完美保留变量的类型
decltype加数组返回值数组的类型
decltype加指针返回指针的类型。
decltype+表达式
int i = 42, *p = &i, &r = i;
// r + 0是一个表达式
// 算术表达式返回右值
// b是一个int类型
decltype(r + 0) b;
// c是一个int &
decltype(*p) c = i;
decltype+函数
// 声明了一个函数类型
using FuncType = int(int &, int);
// 下面的函数就是上面的类型
int add_to(int &des, int ori);
// 声明了一个FuncType类型的指针
// 并使用函数add_to初始化
FuncType *pf = add_to;
int a = 4;
// 通过函数指针调用add_to
pf(a, 2);
//使用decltype获得函数add_to的类型
decltype(add_to) *pf = add_to;