函数形参const 引用

最近看别人代码,CPlayerMgr::Updatepr_player(const sPlayerInfo& kPlayer)  

这个函数里面的形参为什么这么修饰,一直没怎么搞明白,网上查了下,把弄清楚为什么要这么写


const sPlayerInfo& kPlayer  const 表示常量不可修改,这应该好理解,表示传进去的参数kPlayer不能被修改。 但是为什么要加个引用呢

const sPlayerInfo& kPlayer  与  const sPlayerInfo kPlayer有什么区别呢


参考了别人的一篇文章

     1.非引用形参  

      void add1(int v1)       

      { 

          v1+=1;       

}  

      这是最普通的形参方式,当函数被调用时,实参的副本初始化形参,函数并没有访问调用所传递的实参,因此v1+=1不会修改实参的值。对v1的操作只是修改了实参的一个副本。

   

    2. 引用形参  
      void swap(int &a,int &b)       

      { 
          int temp=a;           

         a=b;          

         b=temp;        

      }  
      引用形参直接关联到其所绑定的对象,而非这些对象的副本。 所以这种方法可以修改实参的值,而且更加直观。


看到这里就明白 非引用形参的函数访问的其实是实参的副本,既然是副本,那当然是另外拷贝复制一份出来的,

对于某些巨型类来说复制的速度非常慢, 而且也会有些类型在设计上拒绝复制(比如说cin和cout).
所以人家用的是 const sPlayerInfo& kPlayer 而不是 const sPlayerInfo kPlayer 这样可以减少复制,提升效率,如果不考虑效率,其实两者的意义是一样的。
但是, 对于int这样的小型的内置类型来说, 这丙种这几乎就真的没有差别了, 对于引用通常需要地址来传递, int类型占据的内存和地址一样或者更小(64位机器指针是64位大小)





评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值