Daw*_*wid 3 c++ c++14 forwarding-reference
这两者有区别吗
struct S;
int& foo(S&);
auto&& bar1(S& s) {
return foo(s);
}
decltype(auto) bar2(S& s) {
return foo(s);
}
Run Code Online (Sandbox Code Playgroud)
对于编译器?我一直在这样decltype(auto)的情况下使用,但似乎auto&&可以解决问题。这是巧合还是两者完全相同?
对于您的特定情况下,它会导致相同的:都推导的返回类型bar1()和bar2()是int&。
但是,请注意,auto&&始终导致引用,即,无论是按值返回还是按引用返回,bar1()始终按引用foo()返回。在另一方面,宣告bar2()回归的类型decltype(auto)将导致bar2()返回的值,如果foo(s)按值收益(这不是你的情况)。
我猜你想完美地转发foo(s). 如果是这样,那实际上decltype(auto)就是用例。想一想:如果foo()按值返回,则bar1()的返回类型将被推导出为int&,即返回对临时对象的引用。