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&

posted @ 2022-09-03 16:27  heisse  阅读(82)  评论(0)    收藏  举报