C++引用

转载 2007年09月26日 15:18:00

引用简介

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

  引用的声明方法:类型标识符 &引用名=目标变量名;

  【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名

  说明:

  (1)&在此不是求地址运算,而是起标识作用。

  (2)类型标识符是指目标变量的类型。

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

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

   ra=1; 等价于 a=1;

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

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


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

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

  【例2】:

int a ;
const int &ra=a;
ra=1; //错误
a=1; //正确

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

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

string foo( );
void bar(string & s);

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

bar(foo( ));
bar('hello world');

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

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


引用和多态

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

  【例3】:

class  A;
class  B:public A{……};
B  b;
A  &Ref = b; // 用派生类对象初始化基类对象的引用

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

引用应用

 1、引用作为参数
    2、引用作为返回值
引用作为返回值,必须遵守以下规则:
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了'无所指'的引用,程序会进入未知状态。

(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。

 

 

C++之引用的详解

详细剖析c++中的引用,消除心中久疑虑,拨开云雾见天明。交流学习,共同进步。...
  • Xiao__Tian__
  • Xiao__Tian__
  • 2016年07月03日 12:46
  • 8717

C++中引用(&)的用法和应用实例===引用和多态的关系!!!!!!!!!!!!!!!!!

http://www.cnblogs.com/Mr-xu/archive/2012/08/07/2626973.html C++中引用(&)的用法和应用实例 对...
  • wangyin159
  • wangyin159
  • 2015年08月29日 19:34
  • 1786

C++语言笔记系列之五——引用(&)和this指针详解

1.this指针 (1)this指针是一个类所隐含的指针,一个类(注意不是对象)只有一个this指针,this指针是该类的所有对象所共享的。 (2)当通过一个对象访问该对象的成员时,默认this指针指...
  • laoniu_c
  • laoniu_c
  • 2014年02月24日 10:05
  • 1531

C++引用的本质与修改引用的方法

本文不探讨罗列引用的概念,什么函数传参之类的,这些基础概念和用法很容易搜到~! 本文主要探讨引用和指针在C语言的下一层——即汇编或者确切的说是伪汇编(AT&T伪汇编都一样的代码,你指望下层x86汇编还...
  • huqinweI987
  • huqinweI987
  • 2014年05月02日 15:52
  • 4035

C++:引用作为返回值

  例如,下面的程序是有关引用返回的4种形式:     //*********************     //**   ch9_6.cpp  **     //***********...
  • duhengqi
  • duhengqi
  • 2017年04月16日 22:05
  • 1016

C++:const和引用

上面一篇博客我们已经介绍了基本的const,对于这篇博客,我先说下引用是什么 引用说白了就是为对象另外起了一个名字,引用类型引用另一种类型。 定义方式: 将声明符写成&d的形式来定义引用类型其中d是声...
  • lishuzhai
  • lishuzhai
  • 2016年01月28日 18:24
  • 2069

C++中引用的本质

引用是C++引入的重要机制,它使原来在C中必须用指针实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢?...
  • K346K346
  • K346K346
  • 2015年07月08日 16:33
  • 1899

深入理解C++中的对象和对象引用

先来看一个入门级的程序:
  • stpeace
  • stpeace
  • 2014年11月07日 00:04
  • 5205

C++的一般引用及其数组引用

【转】 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a;...
  • thisnameokbu
  • thisnameokbu
  • 2014年06月12日 10:10
  • 370

c++之引用的本质

引用变量是c++引入的重要机制。错误观念:引用本质只是别名,在符号表中ri和i对应于相同的变量地址int i=5; 0100437E mov dword ptr [i],5 ...
  • Scythe666
  • Scythe666
  • 2016年04月18日 19:34
  • 1150
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++引用
举报原因:
原因补充:

(最多只允许输入30个字)