目录
一、前言
decltype是C++11新增的一个关键字,和auto的功能一样,用来在编译时期进行自动类型推导。引入decltype是因为auto并不适用于所有的自动类型推导场景,在某些特殊情况下auto用起来很不方便,甚至压根无法使用,decltype在模板编程和类型推导中非常有用。
auto varName = value;
decltype(exp) varName = value;
二、基本用法及示例
1、 auto根据=右边的初始值推导出变量的类型,decltype根据exp表达式推导出变量的类型,跟=右边的value没有关系
int x = 5;
decltype(x) y = 10; // y 的类型是 int
2、auto要求变量必须初始化,这是因为auto根据变量的初始值来推导变量类型的,如果不初始化,变量的类型也就无法推导
template <typename T1, typename T2>
auto add(T1 a, T2 b) -> decltype(a + b) {
return a + b;
}
3、而decltype不要求,因此可以写成如下形式
decltype(exp) varName;
原则上讲,exp 只是一个普通的表达式,它可以是任意复杂的形式,但必须保证 exp 的结果是有类型的,不能是 void;如果 exp 为一个返回值为 void 的函数时,exp 的结果也是 void 类型,此时会导致编译错误。示例如下:
int x = 0;
decltype(x) y = 211; // y -> int
decltype(x + y) z = 333; // z -> int
const int& i = x;
decltype(i) j = y; // j -> const int&
const decltype(z) *p = &z; // *p -> const int, p -> const int*
decltype(z) *m = &z; // *m -> int, m -> int*
decltype(m)* n = &m; // *n -> int*, n -> int**
三. 推导规则
decltype的推导规则可以简单概述如下
标签:decltype,推导,int,auto,C++,关键字,exp,const From: https://blog.csdn.net/fanyun_01/article/details/143215516