完美转发例子与研究
#include <iostream>
template<typename T>
void f(T&) {
std::cout << "T&" << std::endl;
}
template<typename T>
void f(T&&) {
std::cout << "T&&" << std::endl;
}
template<typename T>
void test(T&& a) {
/*
a有三种可能的推导类型,int, int&, int&&
不用forward的话,分别匹配T&, T&, T&&
使用forward的话,分别匹配T&&, T&, T&&
*/
f(std::forward<T>(a));
f(a);
}
int main() {
// 纯右值
test(3);
// 右值(将亡值,临时变量)
test(int(3));
int a = 3;
// 左值
test(a);
return 0;
}