mou*_*_00 11 c++ return-type c++14 forwarding-reference decltype-auto
我正在尝试制作模板包装函数,该函数应该转发参数并返回值。我无法决定使用什么auto&&或decltype(auto)返回类型更好。我读过 Scott Meyers 的文章,并理解与不剥离 ref_qualifiersdecltype(auto)相比,有必要返回。auto据我了解,同样的论点适用于使用auto&&over auto。现在我有以下问题:
decltype(auto)和何时没有区别?auto&&rvalue,例如:return int{};?返回值会是悬空引用吗?decltype(auto)和 和有什么区别auto&&?什么更适合作为远期回报类型?son*_*yao 19
decltype(auto)和 和有什么区别auto&&?
decltype(auto)涵盖三种情况。返回左值时,返回类型为T&(lvalue-reference);对于 xvalues,返回类型为T&&(rvalue-reference);对于纯右值,返回类型为T(非引用,即按值返回)。
auto&&仅涵盖两种情况。返回左值时,返回类型为T&(lvalue-reference);对于右值,包括 xvalue 和纯右值,返回类型为T&&(rvalue-reference)。(转发参考始终是参考。)
如果我们返回右值对象会发生什么,例如:
return int{};?返回值会是悬空引用吗?
由于auto&&返回类型是右值引用,所以返回的引用始终是悬空的。对于decltype(auto)返回类型是非引用的则没有这样的麻烦。