引用

左值  右值   (纯右值,将亡值)             

可以在等号左边

只能在等号右边
能够取到地址 不能取地址
具名 不具名

1. 变量名

2.返回左值引用的函数

3.解引用   (*this)

4. ++i是左值

5. 声明出来的左值引用

6.右值引用

1.返回非引用类型的函数调用 (int func(void))

2.i++ 是纯右值

3. 算术,逻辑,比较表达式

4.将亡值:触发移动构造 或者 移动赋值构造,并资源转移,接着该值会调用析构函数

 

左值引用可以指向右值。 const int & , 不能修改这个值。

右值引用        int &&      为了解决能够修改这个值。

 

将左值改成右值。 std::move(v)

 

类对象有堆栈资源, 需要进行深拷贝。

A a ,b   

a=b   // 移动构造

---------

A a;

A b(a);  //拷贝构造

A c(std::move(a));  // 右值构造    对象赋值,避免对象的重新分配。 减少一次深拷贝,在创建对象的时候,直接将原先的数据地址进行转移。

 

移动构造,就是来解决,深拷贝的。

 

    避免对象拷贝

左值引用 右值引用

函数传参数

函数返回值

实现移动语义

实现完美转发 (在模板函数中,不改变原有的左右值属性,可以将自己的参数,完美的转给内部调用的其他函数)

 

借用万能引用func(T &&t){     //引用折叠,完美转发
f(std::forward<T>{t})
}

 

 

 

https://www.bilibili.com/video/BV14z4y1B7bd?p=2&vd_source=070088cf37075da9bc162f2560ec50eb

posted @ 2024-05-07 13:30  于光远  阅读(28)  评论(0编辑  收藏  举报