decltype((variable))总是引用类型,但是decltype(variable)只有当variable是引用类型时才是引用类型。
#include <iostream> #include <typeinfo> using std::cin; using std::cout; using std::endl; auto f(auto x) { return x+1;} auto f(auto x,auto y)->decltype(y){ return x-y; } double func() { cout << "func executed." << endl; return 2.5+3.6; } int main() { decltype(func()) sum; cout << typeid(sum).name() << endl; const int ci = 0, &cj = ci; decltype(ci) x = 0; decltype(cj) y = x; //decltype(cj) z; // compile error: ‘z’ declared as reference but not initialized cout << typeid(x).name() << endl; cout << typeid(y).name() << endl; int i = 10, *p = &i, &r = i; decltype(r + 0) b; //decltype(*p) c; // compile error: ‘c’ declared as reference but not initialized cout << typeid(b).name() << endl; decltype(i) u; //decltype((i)) v; // compile error: ‘v’ declared as reference but not initialized return 0; }