C++中的引用(1)

2016-02-19 18:07 2 1 收藏

今天图老师小编给大家介绍下C++中的引用(1),平时喜欢C++中的引用(1)的朋友赶紧收藏起来吧!记得点赞哦~

【 tulaoshi.com - 编程语言 】

引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。
  
  引用简介
  
  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
  
  引用的声明方法:类型标识符 &引用名=目标变量名;
  
  :int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
  
  说明:
  
  (1)&在此不是求地址运算,而是起标识作用。
  
  (2)类型标识符是指目标变量的类型。
  
  (3)声明引用时,必须同时对其进行初始化。
  
  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
  
  ra=1; 等价于 a=1;
  
  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
  
  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
  
  引用应用
  
  1、引用作为参数
  
  引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,假如有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些非凡情况下又是必须的选择),就是引用。
  
  :
  
  void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
  
  { int p; p=p1; p1=p2; p2=p; }
  
  为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何的非凡要求。如:对应上面定义的swap函数,相应的主调函数可写为:
  
  main( )
  
  {
  
   int a,b;
  
   cinab; //输入a,b两变量的值
  
   swap(a,b); //直接以变量a和b作为实参调用swap函数
  
   couta ' ' b; //输出结果
  
  }
  
  上述程序运行时,假如输入数据10 20并回车后,则输出结果为20 10。
  
  由可看出:
  
  (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
  
  (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;假如传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
  
  (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很轻易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更轻易使用,更清楚。
  
  假如既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。
  
  引用简介
  
  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
  
  引用的声明方法:类型标识符 &引用名=目标变量名;
  
  :int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
  
  说明:
  
  (1)&在此不是求地址运算,而是起标识作用。
  
  (2)类型标识符是指目标变量的类型。
  
  (3)声明引用时,必须同时对其进行初始化。
  
  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
  
  ra=1; 等价于 a=1;
  
  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
  
  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
  
  引用应用
  
  1、引用作为参数
  
  引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,假如有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些非凡情况下又是必须的选择),就是引用。
  
  :
  
  void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
  
  { int p; p=p1; p1=p2; p2=p; }
  
  为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何的非凡要求。如:对应上面定义的swap函数,相应的主调函数可写为:
  
  main( )
  
  {
  
   int a,b;
  
   cinab; //输入a,b两变量的值
  
   swap(a,b); //直接以变量a和b作为实参调用swap函数
  
   couta ' ' b; //输出结果
  
  }
  
  上述程序运行时,假如输入数据10 20并回车后,则输出结果为20 10。
  
  由可看出:
  
  (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
  
  (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;假如传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
  
  (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很轻易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更轻易使用,更清楚。
  
  假如既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。
   引用是C++引入的新语言特性,是C++常用的一个重要内容之一,正确、灵活地使用引用,可以使程序简洁、高效。
  
  引用简介
  
  引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。
  
  引用的声明方法:类型标识符 &引用名=目标变量名;
  
  :int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名
  
  说明:
  
  (1)&在此不是求地址运算,而是起标识作用。
  
  (2)类型标识符是指目标变量的类型。
  
  (3)声明引用时,必须同时对其进行初始化。
  
  (4)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。
  
  ra=1; 等价于 a=1;
  
  (5)声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。故:对引用求地址,就是对目标变量求地址。&ra与&a相等。
  
  (6)不能建立数组的引用。因为数组是一个由若干个元素所组成的集合,所以无法建立一个数组的别名。
  
  引用应用
  
  1、引用作为参数
  
  引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,假如有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些非凡情况下又是必须的选择),就是引用。
  
  :
  
  void swap(int &p1, int &p2) //此处函数的形参p1, p2都是引用
  
  { int p; p=p1; p1=p2; p2=p; }
  
  为在程序中调用该函数,则相应的主调函数的调用点处,直接以变量作为实参进行调用即可,而不需要实参变量有任何的非凡要求。如:对应上面定义的swap函数,相应的主调函数可写为:
  
  main( )
  
  {
  
   int a,b;
  
   cinab; //输入a,b两变量的值
  
   swap(a,b); //直接以变量a和b作为实参调用swap函数
  
   couta ' ' b; //输出结果
  
  }
  
  上述程序运行时,假如输入数据10 20并回车后,则输出结果为20 10。
  
  由可看出:
  
  (1)传递引用给函数与传递指针的效果是一样的。这时,被调函数的形参就成为原来主调函数中的实参变量或对象的一个别名来使用,所以在被调函数中对形参变量的操作就是对其相应的目标对象(在主调函数中)的操作。
  
  (2)使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的副本;假如传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比用一般变量传递参数的效率和所占空间都好。
  
  (3)使用指针作为函数的参数虽然也能达到与使用引用的效果,但是,在被调函数中同样要给形参分配存储单元,且需要重复使用"*指针变量名"的形式进行运算,这很轻易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。而引用更轻易使用,更清楚。
  
  假如既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。

来源:https://www.tulaoshi.com/n/20160219/1616840.html

延伸阅读
指针与引用看上去完全不同(指针用操作符’*’和’-’,引用使用操作符’.’),但是它们似乎有相同的功能。指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要熟悉到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此假如你使用一个变量并让它指向一个...
在学习c/c+过程中,指针是一个比较让人头痛的问题,稍微不注重将会是程序编译无法通过,甚至造成死机。在程序设计过程中,指针也往往是产生隐含bug的原因。下面就来谈谈指针的应用以及需要注重的一些问题,里面也许就有你平时没有注重到的问题,希望能帮助各位读者理解好指针。 !-- frame contents -- !-- /frame contents -- ...
   持久对象 (persistent objects)广泛应用于游戏、分布式数据库系统、多媒体以及图形应用程序中。目前C++并不直接支持持久性(persistence)(但有一些在C++未来版本中添加持久性和反射(reflection)的建议)。 !-- frame contents -- !-- /frame contents -- 持久对象可以在创建它的程序的作用域之外保持自身状态。...
在C++层次进行优化,比在汇编层次优化具有更好的移植性,应该是优化中的首选做法。 确定浮点型变量和表达式是 float 型 为了让编译器产生更好的代码(比如说产生3DNow! 或SSE指令的代码),必须确定浮点型变量和表达式是 float 型的。要非凡注重的是,以 ";F"; 或 ";f"; 为后缀(比如:3.14f)的浮点常量才是 float 型,...
函数存放在内存的代码区域内,它们同样有地址,我们如何能获得函数的地址呢? 假如我们有一个int test(int a)的函数,那么,它的地址就是函数的名字,这一点如同数组一样,数组的名字就是数组的起始地址。 !-- frame contents -- !-- /frame contents -- 定义一个指向函数的指针用如下的形式,以上面的test()为例: ...

经验教程

837

收藏

59
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部