模板参数推导 - 推导T&用过的 [英] Template argument deduction - T is deduced and T&& used

查看:164
本文介绍了模板参数推导 - 推导T&用过的的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

对于示例

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 cv TR 创建类型lvalue引用 T ,而尝试创建类型 rvalue reference to cv TR 创建类型 TR

If a typedef, a type template-parameter, or a decltype-specifier denotes a type TR that is a reference to a type T, an attempt to create the type "lvalue reference to cv TR" creates the type "lvalue reference to T", while an attempt to create the type "rvalue reference to cv TR" creates the type TR.

或以表格形式:

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&amp;用过的的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆