一、万能引用
1、英文:Universal Reference 。
2、诞生的原因
因为 C++ 中存在左值引用和右值引用,导致若想同时实现既可传入左值又可传入右值的功能,需要对相同函数进行重载,导致代码冗余。
3、解决办法
为了解决上述问题,就诞生了万能引用,具体用法如下:
template<typename T>
void func(T&& param) {
;
}
主要实现方法是依靠 C++ 强大的模板推导能力,在编译期间确定 param 是左值还是右值。
4、扩展
&&,在模板形参列表中代表万能引用,在其他地方就代表右值引用。
5、栗子
#include <iostream>
template <typename T>
void func(T &¶m)
{
std::cout << param << std::endl;
}
int main()
{
int num = 0;
func(num);
func(100);
return 0;
}
0
100

本文围绕C++的万能引用、引用折叠和完美转发展开。因C++左、右值引用需函数重载导致代码冗余,诞生万能引用;为判定模板函数中4种引用情况的最终结果,出现引用折叠;为保持引用折叠后数据的引用类型,引入完美转发。
最低0.47元/天 解锁文章
2300

被折叠的 条评论
为什么被折叠?



