3

以下是&&通用参考吗?

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

3 回答 3

7

该术语universal reference是 Scott Meyers 编造的一个术语,用于区分正常的右值引用,即int&&模板代码中的右值引用,即T&&. 这很重要,因为参考折叠规则与模板代码一起发挥作用,因此该术语用于帮助教学。它被称为 a 的原因unversal reference是因为它可以绑定到任何东西。

请记住,universal referenceC++ 语言中没有 a 这样的东西,就语言而言,Function&&它是右值引用。但是,是的,在 Scott Meyer 的虚构术语中,在您的示例中Function&&是一个。universal reference

于 2013-03-03T02:39:49.347 回答
3

&& 是通用参考吗?

有点。就像复活节兔子和圣诞老人​​一样,实际上没有通用参考(对不起,如果我为你破坏了)。通用参考一词未出现在标准中。当“特殊扣除规则”处于活动状态时,Scott Meyers 创造了一个术语来描述模板化的右值引用。

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

于 2013-03-03T02:39:31.607 回答
1

看起来像std::forward<Function>在您的函数中调用时正确转发参数类型。

于 2013-03-03T02:43:26.927 回答