Chinaunix首页 | 论坛 | 博客
  • 博客访问: 240269
  • 博文数量: 127
  • 博客积分: 34
  • 博客等级: 民兵
  • 技术积分: 655
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-03 10:53
文章分类

全部博文(127)

文章存档

2013年(19)

2012年(108)

分类:

2012-12-24 23:25:42

原文地址:c++中引用的使用 作者:邓卓翔

c++与c语言相比,除了直接变量声明,指针声明,又提供了引用声明的方法,来丰富编程的应用。
引用:

点击(此处)折叠或打开

  1. int m = 5;
  2. int& n = m;
n相当于m的一个别称,另一个名字,在后面可以对于n进行操作实现m值改变。
引用用的最多的是作为形参和返回引用。

点击(此处)折叠或打开

  1. int fun1(int a);
  2. int fun2(int* a);
  3. int fun3(int& a);
在fun1中,对形参a的改变不会影响实参的值。
在fun2和fun3中,对形参a的改变会影响到实参的值。fun2中,除了可以对a指针指向的值进行修改以外,还可以对于*(a+k),a指针的“邻居”进行修改。而fun3,只能修改传入实参的值,增加了程序的安全性。

而在返回引用的时候,要十分的小心。程序返回值的一个原理:将返回值首先赋值给一个中间变量,然后再返回这个中间变量。程序返回值虽然写return a,但是返回值并不是a,而是一个中间变量。比如:

点击(此处)折叠或打开

  1. int fun4 (int& a)
  2. {
  3.   return a;
  4. }

  5. int& fun5(int& a)
  6. {
  7.   return a;
  8. }
如果设中间变量为middle的话,fun4可看做int middle = a;然后再将middle赋给其他值。
fun5中,可看做int& middle = a;middle成为了a的一个别称。用引用的方法,可是实现真真正正返回a。
返回值是引用的函数可以作为左值使用。既fun5(a)=3;这样进行赋值。这样,实参a值可以改变。而fun4(a)=3,其实赋给的值是middle=3,a的值并没有任何变化。
返回引用的函数要十分重视。如果返回的值在该函数调用之前并没被创建,这样的返回值将十分危险。如:

点击(此处)折叠或打开

  1. int& fun6(int& a)
  2. {
  3. int b = a;
  4. return b;
  5. }
返回值就是b,如果这样使用该函数int k = fun7(a);的话暂时还没事,如果是int* k,或者int& k的话,k=fun7(a);中间变量的值在执行完函数之后肯定在某一时刻被销毁。这样指针指向的值和别称都不知所指向的内存空间到底是什么,之后再使用k值时十分危险。如果返回值是a的话,a值在调用函数之前是存在的,这样就没有任何问题。还有一个使用返回引用的例子。

点击(此处)折叠或打开

  1. ostream &operator<<(ostream &output, const AAA &aaa)
  2. {
  3.   output << aaa.x << ' ' << aaa.y << ' ' << aaa.z << endl;
  4.   return output;
  5. }

阅读(795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~