因为decltype在很多的时候并不同于auto操作符, 所以我会将大部分的不同罗列出来, 比如 : 数组, 顶层const等.
decltype
decltype的声明 :
decltype(exp(...)) x; // exp()可以是任何的表达式
1. decltype与普通类型
先来看看怎么使用decltype操作符
int i = 0;
decltype(i) di; // 需要传入一个表达式才行..., di并不必须要初始化
decltype(i + 0) j;
decltype(function()) f;
auto ai = i; // auto必须对其进行初始化
与auto不同, decltype..., 所以
int a[] = {
1, 2};
decltype(*a) b = i; // decltype推导出来的是引用, 因为*a表达式的结果是一个左值
decltype(&a[0])...ptr; // decltype推导出的类型是 int **
6. decltype与模板
在模板中, 编译器能自行推导出传入函数的参数类型, 但是无法推导出返回值的类型, 这时我们就可以用decltype