decltype被称为类型说明符,它的作用是选择并返回操作数的数据类型
// sum的类型就是函数f返回的类型decltype(f()) sum = x
工作原理
decltype并不会实际计算表达式的值,编译器分析表达式并得到它的类型
函数调用也算一种表达式,因此不必蛋心在使用decltype是执行了函数。
decltype+变量
const int ci = 0, &cj = ci;// x的类型是const intdecltype(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_topf(a, 2);//使用decltype获得函数add_to的类型decltype(add_to) *pf = add_to;
