返回类型的转发参考

大卫

那两个之间有区别吗

struct S;
int& foo(S&);

auto&& bar1(S& s) {
    return foo(s);
}

decltype(auto) bar2(S& s) {
    return foo(s);
}

对于编译器?我一直在使用decltype(auto)这种情况,但似乎auto&&可以解决问题。是巧合还是两者相同?

罗威

对于您的特定情况下,它会导致相同的:都推导的返回类型bar1()bar2()int&

但是,请注意,auto&&始终会产生引用,即,无论按值返回还是按引用返回bar1()始终都会按引用foo()返回。在另一方面,宣告bar2()回归的类型decltype(auto)将导致bar2()返回的值,如果foo(s)按值收益(这不是你的情况)。

我猜您想完美转发所返回的对象foo(s)如果是这样,那实际上decltype(auto)是用例。想想看:如果foo()已按值返回,则bar1()的返回类型将被推导为int&,即返回对临时变量的引用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章