C++的引用理解

最近学到了C++的引用,随手Mark一下
首先我们看个例子

class A{
	public:
	A():i(0){}
	void f() {cout<< i <<endl;}
	void increment(){i++;}
	private:
	int i;
}
int visit(A a);
int visit(A* a);
int visit(A& a);

有一个类A,创建了一个它的对象a,那么我们用visit用访问这个对象有三种方式。
第一种用函数visit(A a),这种方式非常耗费空间,因为它会在堆栈里面复制一个一模一样的a对象出来,所以当a对象太大时,一般不这么访问
第二种用函数visit(A* a),这种方式传对象的指针进去,效率很高,但是不是很美观,因为要经常用到&,*,->这些运算符
第三种是用也就是引用的方式,它就是创建一个变量的别名,例如A& b=a,那么b就是a的引用。对b操作就是对a操作。注意引用其实就是用指针实现的,只是它这种内存模型给我们提供的操作方式和指针有些区别。它的优势在于代码十分清爽,没有指针哪些繁琐的运算符。JAVA就是这么干的,它没有指针这些供我们使用。但是引用有个缺点,不直观。为什么这么说呢?当你调用visit(a)时,我们不能立马知道是用了变量复制还是引用,而指针visit(&a)就可以很直接明了的告诉我们用了指针。
另外,C++的引用的绑定关系不能改变,你如果把b作为a的引用,那就不能修改b作为其他变量的引用了。当然同一个变量可以有多个引用。例如int a=0;int& b=a;int& c =a;这样是可以的。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值