模板参数推导 - 推导T&用过的 [英] Template argument deduction - T is deduced and T&& used
问题描述
对于示例
template <typename T>
void function(T&& arg)
结束该函数签名变为T&对于左值和T&对于通过的价值?我知道,不知何故(需要标准线)T - > T&在lvalue的情况下,T→T,在重新值的情况下,然后通过组合&和&&
Can somebody explain in detail how does it end that function signature becomes T& for lvalues and T&& for rvalues passed in ? I know that somehow(standard line needed) T -> T& in the case of lvalues and T -> T in case of revalues and then by combining & and && it results lvalue/rvalue reference.
推荐答案
规则在第8.3.2p6节中找到。
The rule is found in section 8.3.2p6.
如果typedef,类型模板参数或 decltype-specifier 表示类型
TR
是对类型T
的引用,试图创建类型lvalue reference to cvTR
创建类型lvalue引用T
,而尝试创建类型 rvalue reference to cvTR
创建类型TR
。
If a typedef, a type template-parameter, or a decltype-specifier denotes a type
TR
that is a reference to a typeT
, an attempt to create the type "lvalue reference to cvTR
" creates the type "lvalue reference toT
", while an attempt to create the type "rvalue reference to cvTR
" creates the typeTR
.
或以表格形式:
TR R
T& & -> T& // lvalue reference to cv TR -> lvalue reference to T
T& && -> T& // rvalue reference to cv TR -> TR (lvalue reference to T)
T&& & -> T& // lvalue reference to cv TR -> lvalue reference to T
T&& && -> T&& // rvalue reference to cv TR -> TR (rvalue reference to T)
这篇关于模板参数推导 - 推导T&用过的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!