转载:聊聊C++中的完美转发 - 知乎 (zhihu.com)
左右值概念:decltype类型推导 和左右值概念_qq_1410888563的博客-CSDN博客
重点:
int a=1;//其中a是左值,1是右值。
通常一个
函数 void Test(int a) //参数可以传左值和右值.相当于 a=传入那个参数;
Test(a);
Test(1);
函数 void Test(int &a) //参数需要传入左值
Test(1);是错误的。
函数 void Test(int &&a) //参数需要传入右值
Test(1);是对的
超级重点:&&传入右值,通常看到函数Test && (int a),或者参数 Test (int && a),说明传入和传出的是右值。
forward:可以保证传入的是什么值就是什么值
move:只能传入右值
#include
template
void print(T& t) {
std::cout << "左值" << std::endl;
}
template
void print(T&& t) {
std::cout << "右值" << std::endl;
}
template
void testForward(T&& v) {
print(v);
print(std::forward(v));
print(std::move(v));
}
int main(int argc, char* argv[])
{
testForward(1);
std::cout << "======================" << std::endl;
int x = 1;
testForward(x);
}