decltype也能推导出变量的类型,并且它比auto推得更加的准确,只有极少情况下会出错。
const int i = 0; decltype(i); //const int bool f(const Point& p); decltype(f); //bool (const Point& p)
另外值得注意的是,如果出现双括号,就要多加个&
const int i = 0; decltype((i)); //const int& bool f(const Point& p); decltype((f)); //bool (&)(const Point& p)
decltype与auto的组合使用来自动推导函数返回值类型
template<typename Container, typename Index> auto authAndAccess(Container& c, Index i) ->decltype(c[i]) { authenticateUser(); return c[i]; }
template<typename Container, typename Index> decltype(auto) authAndAccess(Container& c, Index i) { authenticateUser(); return c[i]; }
写成以上两种形式都可以。