参数传递:pass by reference to const

1.代码

class complex
{
	public complex (double r=0,double i=0)/*pass by value*/
		: re (r),  im(i){}
		complex& operator +=(const complex&);/*return by reference*/
		double real () const { return re}/*return by value*/
		double imag () const{ return im}/*return by value*/
	private:
	 re, im;
	friend complex&__doapl(complex*,const complex&);/*pass by reference*/
};
{
	complex  c1(2.5 ,1.5);
}
inline complex&
__doapl(complex* ths,const complex& r)
{
	ths->re +=r.re;/*将r和ths相加的值给ths*/
	ths->im +=r.im;
	return *ths;/*指针形式传递,reference形式接收以提高传输速度*/
}
inline complex&
complex::operator +=(const complex& r)
{
		return __doapl(this,r);
}

总结

pass by reference,就是封装的指针,指针大小一般小于所需要传输的数据,引用时,假设要传递一个1MB的数据,传值就是直接传递1MB,pass by reference就相当于把电脑中所储存的1MB的地址传递出去,大大提高了传输速度
照目前理解,传输/返回的时侯在变量类型后加&就变成的pass/return by reference。
complex& operator +=(const complex&);
左边的complex是pass by reference,右边的complex是return by reference

在pass时尽量采用reference,但在return的时候,有小半数的情况是不允许return by reference,需注意
+=这种操作会将+=左边的参数值改变,右边的参数不变,在函数中,c3=c1+c2此时c1/c2的值不会改变,但c3的值因为是局部变量,就不能pass by reference因为函数结束后c3就不存在了
除了这种情况,都可以pass by reference,侯捷老师是这么说的,我理解的意思是pass by reference类似指针,在地址被传送出去时原来地址上的东西不能改变否则就会报错,如上面提到的局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值