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

 

右值 , 折叠引用详细说明: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.csdn.net/dashoumeixi/article/details/83063207


右值在模板中有例外:

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

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


//折叠引
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值