默认模板类型可以是通用引用吗?
Can a defaulted template type be universal reference?
下面,&&
是一个通用参考吗?
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>
在函数中调用时正确地转发参数类型
相关文章:
- 强制转换为引用类型
- 自定义引用类型
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 为什么我不能在运算符=中使用引用类型?
- 可变参数模板函数参数和引用类型推导
- 隐式可转换参数,但属于引用类型
- 如何告诉自动推断向量<bool>元素的非引用类型
- 为什么"const auto [x, y]"绑定到引用类型时没有按预期运行?
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 为什么引用类型在使用临时对象访问时是左值
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在 lambda 中从引用类型捕获的值的类型,不使用通用捕获
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- void*作为通用引用类型是如何工作的
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- C++ 引用类型作为递归函数参数
- EXPECT_CALL具有 unique_ptr 引用类型参数的模拟函数
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 为什么模板引用类型不能用作模板类型别名参数?
- 模板默认参数将丢失其引用类型