C++中的万能引用和完美转发
- 阅读这篇博文需要了解C++中的左值(lvalue)和右值(rvalue)的概念,详情参见我的另外一篇博文:C++移动语义及拷贝优化
- 万能引用和完美转发多涉及到模板的使用,如若不是自己写模板,则可不用关心
万能引用(Universal Reference)
首先,我们来看一个例子:
#include <iostream>
using std::cout;
using std::endl;
template<typename T>
void func(T& param) {
cout << param << endl;
}
int main() {
int num = 2019;
func(num);
return 0;
}
这样例子的编译输出都没有什么问题,但是如果我们修改成下面的调用方式呢?
int main() {
func(2019);
return 0;
}
则会得到一个大大的编