見積りの折りたたみ、転送、完全転送

1参照の折りたたみ

1.1参照の折りたたみ

左辺値参照と右辺値参照に従って、4つの組み合わせを配置できます。

左辺値参照右辺値参照

左辺値参照左辺値参照

右辺値参照左辺値参照

右辺値参照右辺値参照

しかし、実際にコーディングすると、引用された参照がある場合、コンパイラはそれを無条件に報告するため、C ++ 11には参照の折りたたみの理論があります。

参照折りたたみ規則:左辺値参照が発生した場合、それは折りたたみ後の左辺値参照であり、それ以外の場合は右辺値参照

 

2 std :: forward

2.1フォワード

	int  t = 10;

	//如果想将t转换为左值,<>中就使用 类型&
	int &a = std::forward<int&>(t);

	//如果想将t转换为右值,<>中就使用 类型
	int &&b = std::forward<int>(t);

forwardは完全な転送を実現するために使用できます 

3 std :: move

3.1移動

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

 

公開された123元の記事 ウォン称賛31 ビュー90000 +

おすすめ

転載: blog.csdn.net/qq_40794602/article/details/103226360