C++ 左值,右值,左右值转发,完美转发
1、左值引用(&)
int test(int &a)
{std::cout << a << std::endl;
}int a = 10;
test(a);
2、右值引用(&&)
int test(int &&a)
{std::cout << a << std::endl;
}test(10);
3、std::move() 右值转左值
- std::move() 只能将左值转为右值
int a = 10;
int b = std::move(a);
4、std::forword 左值右值完美转发
- 将左值转为右值
int a = 10;
std::forword<int &&>(a);
- 将右值转为左值
std::forword<int &>(10);
5、类模板&&既兼容左值又兼容右值
- 类模板可以左右值兼容是因为调用时可以重新推导变量是左值还是右值。
template<typename T>
int test(T&& a)
{}int a = 10;
1、左值调用 test(a);
2、右值调用 test(100);