avatar-decorate
获赞
156
粉丝
74
关注
26
看过 TA
2146
桂林电子科技大学
2024
算法工程师
IP属地:上海
四非本科 算法考试60分 ICPC银 CCPC银
私信
关注
## 左右值引用[参考文献1:一文读懂C++右值引用和std::move](https://zhuanlan.zhihu.com/p/335994370)基本区分:有地址的变量是左值,没地址的字面值临时值及时右值**左值引用**const int& a 的使用场景  这个被称为const左值引用,特性:通过该引用建立的变量,无法进行修改,因此可以将该引用绑定到临时变量上。```void push_back(int &a);int a = 4;对于vec.push_back(4);  就会出现int &a = 4;这种左值引用指向右值的问题,会编译失败const左值引用不会修改指向值void push_back(const int &a) 则会避免这种情况```**右值引用**  右值引用专门为右值而生,可以指向右值,不能指向左值```int &&ref_a_right = 5; // ok int a = 5;int &&ref_a_left = a; // 编译不过,右值引用不可以指向左值 ref_a_right = 6; // 右值引用的用途:可以修改右值```使用场景:移动构造(a=b,b的复制给a后同时删除b,这就不得不使用右值引用了)**std::move()**该函数会将左值强制转换为右值,让右值引用可以指向左值,同时move的变量会失去原有值```1. 从性能上讲,左右值引用没有区别,传参使用左右值引用都可以避免拷贝。2. 右值引用可以直接指向右值,也可以通过std::move指向左值;而左值引用只能指向左值(const左值引用也能指向右值)。3. 作为函数形参时,右值引用更灵活。虽然const左值引用也可以做到左右值都接受,但它无法修改,有一定局限性。```const 在修饰返回值时可以起到保护的左右explicit 是对于构造函数的修饰,防止隐式转换,保证vector (4), 防止 vector a = 4;
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务