Quote folding, forwarding and perfect forwarding

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;
}

 

Published 123 original articles · praised 31 · 90,000 views +

Guess you like

Origin blog.csdn.net/qq_40794602/article/details/103226360
Recommended