decltype和auto的区别
- auto 会忽略顶层const,decltype不会
- 不管对于引用(&a)还是解引用(*p)操作,auto的结果都是对象本身的类型,而decltype得到的结果都是引用类型
const int ci = i,&cr = ci,*p = ci;
auto a = ci; //a是一个整数(顶层const被忽略)
auto b = cr; //b同上
auto &c = ci; //c是一个整型常量的引用(仍遵循引用初始化的规则)
auto d = *p; //d是一个整数
decltype(ci) dx = 0; //dx是一个整型常量
decltype(cr) dy = dx; //dy是一个整型常量的引用,初始化为dx的引用
decltype(*p) dz = dx; //dz同上
需要注意的是,decltype((variable))
的结果永远都是引用