模板参数 右值引用 折叠引用 forward 转发

本文详细探讨了C++中的右值引用特性,如何通过右值引用提升效率。同时,介绍了折叠引用的概念,以及在实际编程中如何利用std::forward进行高效的数据转发。通过对std::move的解析,阐述了其将左值转换为右值引用的机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

右值 , 折叠引用详细说明:move 右值 折叠引用

右值(严格来说是右值变量)只能绑定到一个匿名的临时对象

1. 先简介 右值 与 模板参数的关系

    
右值简介:

    int i = 10;
    int& r = i; //ok
    int&& rr = i ; //error . 右值只能绑定字面量或临时对象;
    int&& rr2 = 55; //ok

    int& lr = rr2; //ok , 左值可以绑定左值. rr2是一个左值(变量);    

    //这个很重要, 虽然rr是右值引用, 但本身还是一个左值变量
    int&& rr3 = rr; //error , rr是一个左值, rr3无法绑定到一个左值;

    //当然可以强制类型转换: std::move , move实现就是static_cast;
    int&& rr3 = std::move(r); // static_cast<int&&>(r);

需要注意:
int &&rr3 = rr; //error
int &&rr3 = std::move(rr) //ok
这2行代码一定要理解, 否则std::forward 将永远是一个谜. 另一个帖子详细的讲述了右值:
https://blog.youkuaiyun.com/dashoumeixi/article/details/83063207


右值在模板中有例外:

//有如下普通函数:
void f_1(int&& i){}

只能如此调用: f_1(100); 但对于模板有例外


//折叠引
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值