auto作为返回值类型与decltype推断有什么区别
对使用 auto 来表明函数返回类型的情况,编译器使用模板类型推导,会消除引用。
decltype推断则保留返回值类型。
比如
template<typename Container, typename Index>
auto authAndAccess(Container &c, Index i)
{
authenticateUser();
return c[i];
}
auto返回会剥离c[i]返回值int&的引用,返回值类型为int.
decltype(c[i])返回值类型为int&