返回 auto&& 和 decltype(auto) 有什么区别?
What is the difference between returning auto&& and decltype(auto)?
我正在尝试制作模板包装函数,它应该转发参数和 return 值。而且我无法决定将 auto&&
或 decltype(auto)
用于 return 类型哪个更好。我读过 Scott Meyers article 并了解到有必要 return decltype(auto)
与 auto
相比,不要剥离 ref_qualifiers。
据我所知,同样的论点适用于使用 auto&&
而不是 auto
。
现在我有以下问题:
- 我说的对吗,return 引用对象时
decltype(auto)
和 auto&&
没有区别?
- 如果我们 return
rvalue
对象会发生什么,例如:return int{};
? return 值会是悬空引用吗?
decltype(auto)
和 auto&&
有什么区别?什么更适合 forward return 类型?
What is the difference between decltype(auto)
and auto&&
?
decltype(auto)
涵盖三种情况。当 returning 左值时,return 类型将是 T&
(左值引用);对于 xvalues,return 类型将是 T&&
(右值引用);对于纯右值,return 类型将是 T
(非引用,即按值 return)。
auto&&
只涵盖两种情况。当 returning 左值时,return 类型将是 T&
(左值引用);对于右值,包括 xvalues 和 prvalues,return 类型将是 T&&
(右值引用)。 (Forwarding reference 始终是参考。)
What happens if we return rvalue object, like: return int{};
? Will return value be dangling reference?
对于 auto&&
,return 类型是右值引用,所以是的,returned 引用总是悬空的。对于 decltype(auto)
,return 类型是非引用,那么就没有这样的麻烦。
我正在尝试制作模板包装函数,它应该转发参数和 return 值。而且我无法决定将 auto&&
或 decltype(auto)
用于 return 类型哪个更好。我读过 Scott Meyers article 并了解到有必要 return decltype(auto)
与 auto
相比,不要剥离 ref_qualifiers。
据我所知,同样的论点适用于使用 auto&&
而不是 auto
。
现在我有以下问题:
- 我说的对吗,return 引用对象时
decltype(auto)
和auto&&
没有区别? - 如果我们 return
rvalue
对象会发生什么,例如:return int{};
? return 值会是悬空引用吗? decltype(auto)
和auto&&
有什么区别?什么更适合 forward return 类型?
What is the difference between
decltype(auto)
andauto&&
?
decltype(auto)
涵盖三种情况。当 returning 左值时,return 类型将是 T&
(左值引用);对于 xvalues,return 类型将是 T&&
(右值引用);对于纯右值,return 类型将是 T
(非引用,即按值 return)。
auto&&
只涵盖两种情况。当 returning 左值时,return 类型将是 T&
(左值引用);对于右值,包括 xvalues 和 prvalues,return 类型将是 T&&
(右值引用)。 (Forwarding reference 始终是参考。)
What happens if we return rvalue object, like:
return int{};
? Will return value be dangling reference?
对于 auto&&
,return 类型是右值引用,所以是的,returned 引用总是悬空的。对于 decltype(auto)
,return 类型是非引用,那么就没有这样的麻烦。