那两个之间有区别吗
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] 删除。
我来说两句