1 Reference collapse
1.1 Reference folding
According to lvalue references and rvalue references, we can arrange four combinations:
Lvalue reference rvalue reference
Lvalue reference lvalue reference
Rvalue reference lvalue reference
Rvalue reference rvalue reference
But when we actually code, if there is a quoted reference, the compiler will report it unreservedly, so C ++ 11 has the theory of reference folding.
Reference folding rule: when an lvalue reference occurs, it is an lvalue reference after folding, otherwise it is an rvalue reference
2 std::forward
2.1 forward
int t = 10;
//如果想将t转换为左值,<>中就使用 类型&
int &a = std::forward<int&>(t);
//如果想将t转换为右值,<>中就使用 类型
int &&b = std::forward<int>(t);
forward can be used to achieve perfect forwarding
3 std::move
3.1 move
#include<iostream>
using namespace std;
void func(int&& t)
{
cout << "func函数" << endl;
}
int main()
{
int && t = 7; //7是一个右值,所以t是一个右值引用,但是对于t本身他是一个左值
//func(t); //报错,因为func形参需要一个右值,但是传入的实参却是一个左值
func(std::move(t)); //move可以强制将一个左值转换为右值
return 0;
}