C++中 引用的理解

引用是一种用来表示其他变量的别名,对引用进行的操作会反应到其所引用的变量中。

引用的声明以及使用

int i = 5;
int& r = i;//声明引用r指向变量i

引用的声明格式是 类型& 引用名;

和声明指针变量一样,这里的 “&”符也不是取地址的意思,而是一种类似于“引用说明符”的东西,用来说明这个变量是引用类型。

声明引用后,对引用进行的一切操作都相当于对其所引用的变量进行操作。例如让上面的引用r自增:

r++;//等价于i++

 此时i就等于6,同理,对引用r取地址,也是取的变量i的地址,其他所有操作都一样。

可以将引用作为函数形参:

void add(int& a,int& b){
	a += b;//注意,实参中变量a的值将会被改变
}

add方法接受两个int型引用,注意,调用这个函数之后实参a的值将会改变,这种按引用调用的函数不会在内存中创建实参的副本,而是直接操作实参,在这点上和传址调用差不多,函数调用后实参的值将会被改变。

 

此外,在C++中,可以通过引用建立一个无名的实体,例如:

int& i = *new int(10);
std::cout << i;

那么相应的释放代码就是:

delete &i;

引用的一些特点

1.首先,引用与指针不同,指针是一个变量,系统会为指针变量分配内存,而引用本身不是一个变量,没有他自己的内存空间。

2.引用在定义的时候必须为其初始化,初始化以后,引用不可改变其引用的变量(即不可重新引用别的变量),这点与常量指针相似。

3.对引用取地址实际上是取被引用变量的地址,这点上文说过了。

4.被引用的对象必须为左值,也就是必须是一个变量。(在c++11标准添加了右值引用,这里不谈)

5.引用声明中的“&”符号仅作为一种说明符,并非取地址符。

 

将引用作为函数参数时的注意事项

1.避免错误地修改引用所指变量。按引用调用相当于传址调用,是会改变实参变量值的一种调用方式。

2.如非必须修改引用所指变量的内容,应将引用形参声明为const引用,此外,形参引用声明为const可以接受const和非const的实参,声明为非const类型则不可以接受const的实参,请务必注意。

3.避免返回函数内的局部变量的引用。局部变量在离开作用域后会被自动释放,请注意。

4.当函数的形参引用时,如果调用函数时传递的是右值,那么实际上函数将会接收到一个临时变量的引用,此时形参必须为const引用,例如函数:

void add(const int& a,const int& b){
	std::cout << a
	<< std::endl
	<< b;
}

如果我在调用的时候传入右值:

add(10,20);

那么此时add函数将会接收到两个由系统创建的临时变量的引用。

5.尽量避免在函数中创建并返回堆内存变量的引用,否则极易因忘记释放而导致内存泄露。

本文到此结束,感谢大家的阅读。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值