int i = 0;
const int ci = i;
auto b = ci;//auto会忽略顶层const,所以b的类型为int
int *p = &i;
decltype (*p) c = i;//c的类型int &
decltype和auto都可以推断类型,但是二者有几处明显的差异:
1、auto忽略顶层const,decltype保留顶层const;
2、对引用操作,auto推断出原有类型,decltype推断出引用;
3、auto推断时会实际执行,decltype不会执行,只做分析。总之在使用过程中和const、引用和指针结合时需要特别小心。