/***auto 会去掉顶层const 和 & 而decltype 不会***/ //什么是顶层? const int x=0, *ptr = x; auto i = ptr; //i is int * decltype(i) is const int * int i = 42, *p = &i, &r = i; decltype(i) x1 = 0; //因为 i 为 int ,所以 x1 为int auto x2 = i; //因为 i 为 int ,所以 x2 为int decltype(r) y1 = i; //因为 r 为 int& ,所以 y1 为int& auto y2 = r; //因为 r 为 int& ,但auto会忽略引用,所以 y2 为int decltype(r + 0) z1 = 0; //因为 r + 0 为 int ,所以 z1 为int, auto z2 = r + 0; //因为 r + 0 为 int ,所以 z2 为int, ///对指针解引用之后decltype返回该类型指针的引用 , auto 只返回该类型 decltype(*p) h1 = i; //这里 h1 是int&, 原因后面讲 auto h2 = *p; // h2 为 int. ///另一个 decltype 返回与表达式形式相关 例如 int x=0; decltype(x) is int decltype( (x) ) is int& decltype(auto) f1() { int x=0; return (x); }//返回值是int& decltype(auto) f2() { int x=0; return x; }//返回值是int ///decltype 后面是表达式的时候 返回左值的引用 decltype(x = i) is int&//也就是说