pa = a; // auto推导的pa是一个指针
pa = &a[0]; // success, 因为pa是指针
da = &a[0]; // error. da类型是 int[10], 不是指针
用decltype...**
const int cc = 0;
decltype(cc) dc = 1; // 必须对dc进行初始化, 因为dc是const int类型
这里也就可以看出来decltype很”老实”, 给我什么类型就返回什么类型...推导出来的是引用, 因为*a表达式的结果是一个左值
decltype(&a[0]) ptr; // decltype推导出的类型是 int **
6. decltype与模板
在模板中, 编译器能自行推导出传入函数的参数类型..., 但是无法推导出返回值的类型, 这时我们就可以用decltype来解决这个问题.
template
T2 func(T1 t1) {
return..., 并不是auto来推导返回值类型, 而是decltype在函数返回的时候来推导返回值的类型
在c14中decltype也有所修改, 在返回值后置中做了一些修改, 可以不用后置, 使用可以如下 :
template