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