std::forward():将一个引用(左值引用或右值引用)转发为相同类型的引用。
给std::forward()传左值,将返回左值引用;传右值,返回右值引用。
#include <iostream>
#include <utility>
void func(int& x) {
std::cout << "func(int&): " << x << std::endl;
}
void func(int&& x) {
std::cout << "func(int&&): " << x << std::endl;
}
template<typename T>
void wrapper(T&& x) { // 在模板里面,T&& 是万能引用,可接收左值或右值,然后推导出是左值还是右值.
func(std::forward<T>(x));
}
int main() {
int a = 1;
wrapper(a); // call func(int&),a是左值
wrapper(2); // call func(int&&),2是右值
return 0;
}