首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >std::forward如何推断`_Ty`的类型?

std::forward如何推断`_Ty`的类型?
EN

Stack Overflow用户
提问于 2019-05-30 05:13:16
回答 1查看 465关注 0票数 3

我正在学习模板,尤其是std::forward;当我检查它的实现时,它在它的参数列表中使用了另一个类模板std::remove_reference

template<class _Ty>
_Ty&& forward(typename remove_reference<_Ty>::type& _Arg)
{// forward an lvalue as either an lvalue or an rvalue
   // ...
}

顺便说一句:为了清晰起见,我删除了一些东西,比如inline、constexpr、NO_EXCEPT和函数体

我读到了当模板参数是指针(_Ty*)、引用(_Ty&)、通用引用(_Ty)以及类型本身(_Ty)时,类型是如何推导出来的。在本例中,它是一个引用,但在它前面添加了removed_reference<_Ty>::type;通过调用remove_reference_Ty和引用分开。编译器如何确定_Ty的类型

函数模板必须使用传递给函数的参数来确定模板参数(当没有在函数调用中显式定义它们时),但在本例中,remove_reference也是一个需要确定_Ty类型的类模板。对我来说,这似乎是个难题,因为std::forward需要使用它的函数参数来找出_Ty,但是它的函数参数std::remove_reference<_Ty>需要已经知道_Ty是什么。所有这些都告诉我,我对模板的工作原理有一个有缺陷的理解,但我不知道在哪里。

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 05:21:14

它不会演绎它。这就是为什么当你使用std::forward时,你必须给它提供模板参数:

std::forward<T>(t);

这与std::move相反,它确实是演绎的,通常使用如下方式:

std::move(t);
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56368603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档