C++中引用的理解

来源:互联网 发布:永恒的终结 知乎 编辑:程序博客网 时间:2024/05/18 01:47

1.引用(reference)是c++对c语言的重要扩充。

2.引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。

3.声明引用时,必须同时对其进行初始化。

4.引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。

  int a,&ra=a;

  a为目标原名称,ra为目标引用名。给ra赋值:ra=1; 等价于 a=1;

5.声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。

6.不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。

我的理解。定义一个数组,int a[10].对数组定义一个引用,是违法的。因为不可以对数组这个整体定义引用。

这意味着,完全可以对数组的一个成员定义引用,比如为a[0]定义一个引用。

但不意味着不可以为复合类型定义引用。比如,为类定义引用完全可以。

7.引用当形参时如下:

  void swapint(int &a,int &b)

  {

  int temp;

  temp=a;

  a=b;

  b=temp;

  }

c++自动把x,y的地址作为参数传递给swap函数。

8.当大型对象被传递给函数时,使用引用参数可使参数传递效率得到提高,因为引用并不产生对象的

  副本,也就是参数传递时,对象无须复制。

9.只有类里面的方法可以返回引用,并且引用对象为类成员变量。

  对于一般的函数调用,返回引用将导致编译出错.

10.常引用声明方式:const 类型标识符&引用名=目标变量名;

  用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。

  【例】:

  int a ;

  const int &ra=a;

  ra=1; //错误

  a=1; //正确

  这不光是让代码更健壮,也有些其它方面的需要。

  【例】:假设有如下函数声明:

  string foo( );

  void bar(string & s);

  那么下面的表达式将是非法的:

  bar(foo( ));

  bar("hello world");

  原因在于foo( )和"hello world"串都会产生一个临时对象,而在C++中,这些临时对象都是const类型的。因此上面的表达式就是试图将一个const类型的对象转换为非const类型,这是非法的。

  引用型参数应该在能被定义为const的情况下,尽量定义为const 。

11.

引用是除指针外另一个可以产生多态效果的手段。这意味着,一个基类的引用可以指向它的派生类实例。

  【例】:

  class A;

  class B:public A{……};

  B b;

  A &Ref = b; // 用派生类对象初始化基类对象的引用

  Ref 只能用来访问派生类对象中从基类继承下来的成员,是基类引用指向派生类。如果A类中定义有虚函数,并且在B类中重写了这个虚函数,就可以通过Ref产生多态效果。

原创粉丝点击