默认模板类型可以是通用引用吗?

Can a defaulted template type be universal reference?

本文关键字:引用 类型 默认      更新时间:2023-10-16

下面,&&是一个通用参考吗?

template <class Function = std::greater<int> > void f(Function&& f = Function());

术语universal reference是Scott Meyers为了区分正常的右值引用(即int&&)和模板代码中的右值引用(即T&&)而编造的术语。这一点很重要,因为引用折叠规则在模板代码中起作用,所以这个术语用于帮助教学。它被称为unversal reference的原因是它可以绑定到任何东西。

请记住,在c++语言中没有universal reference这样的东西,Function&&在语言中是右值引用。然而,是的,在Scott Meyer的编造术语中,Function&&是您示例中的universal reference

,,通用参考?

。就像复活节兔子和圣诞老人一样,实际上并没有所谓的通用参考(如果我破坏了这一点,请原谅)。术语通用引用没有出现在标准中。这是Scott Meyers创造的术语,用来描述在"特殊推导规则"活动时模板化的右值引用。

显示的有效代码。在这种情况下,特殊的扣除规则确实适用。也就是说,当您将左值参数A传递给f时,Function将推导出A&。所以根据斯科特的定义,是的,Function是一个"通用参考"。

看起来,std::forward<Function>在函数中调用时正确地转发参数类型