要以引用返回函数值,则函数定义时的格式如下:

  类型标识符&类型名 (形参列表及类型说明)

  { 函数体 }

  用const限定引用的声明方式为:

  const 类型标识符&引用名=目标变量名;

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

  注意几点:

  • 要以引用返回函数值,则定义函数时需要在函数名前加上&。
  • 用引用返回一个函数值的最大好处是:在内存中不产生被返回值的副本;而用普通的返回值的方法返回一个函数的函数值时,需要在内存中先创建一个临时变量,在被调函数返回时,将函数值复制到该临时变量中,主调函数再以该临时变量的值进行运算。
  • 在引用的使用中,单纯给某个变量取个别名是毫无意义的, 引用的目的主要是在函数参数传递中解决大对象的传递效率和空间不如意的问题。
  • 用引用传递函数的参数能保证参数传递中不产生副本和提高传递的效率,且通过const的使用,又保证了引用传递的安全性。
  • 引用与指针的区别在于:指针通过某个指针变量指向一个对象后,对它所指向的变量间接操作,程序中使用指针使程序的可读性差;而引用本身就是目标变量的别名,对引用的操作就是对目标变量的操作。
  • 一般情况下,赋值表达式的左边只能是变量名,即被赋值的对象必须是变量,因为孩子有变量才能被赋值,而常量或表达式不能被赋值,但如果一个函数的返回值是引用,则赋值号的左边可以是该函数的调用。

本人自学,教材可能有点老,有问题的话求大家指正!!!谢谢!!!

例题:

  • 定义一个普通的函数,使用返回值的方法返回函数值,定义另一个函数使用引用的方法返回函数值
 #include<iostream>
using namespace std; int f1(int a);
int &f2(int a); int f1(int a)
{
int num;
num = a*;
return num;
} int &f2(int a)
{
int num;
num = a*;
return num;
} int main()
{
int a,b;
a=f1();
b=f2();
cout << f1() << endl;
cout << f2() << endl;
cout << a << endl;
cout << b << endl;
//int &ra=f1(3); 这种用法可能会出错,(不同C++系统有不同规定)
int &rb=f2();
cout << rb << endl;
return ;
}
  • 使用返回引用的函数值作为赋值表达式的左值
 #include<iostream>
using namespace std; int &put(int n);
int vals[];
int error=-; int &put(int n)
{
if(n>= && n<=)
return vals[n];
else
{
cout << "error!" << endl;
return error;
}
} int main()
{
put()=;
put()=;
cout << vals[] << endl;
cout << vals[] << endl;
return ;
}
  • 使用const限定引用
 include<iostream>
using namespace std; int &fn(const int &a)
{
//a=32; 错误!不可以进行赋值
int b=a;
return b; //如果返回a,也会报错
} int main()
{
int &a = fn();
cout << a << endl;
return ;
} //菜鸟,求大家批评指教,代码编写习惯和规范等等!!!谢谢!!!

本人自学,教材可能有点老,有问题的话求大家指正!!!谢谢!!!

C++返回引用的函数的更多相关文章

  1. PHP:第三章——PHP中返回引用的函数

    <?php header("Content-Type:text/html;charset=utf-8"); $i=1; function &F(){ global $ ...

  2. 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针

      您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...

  3. php函数返回引用示例

    <?php class Test { public $userCache; public function init() { for($i = 0; $i < 5; $i++) { $us ...

  4. 【转】C/C++ 引用作为函数的返回值

    转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ...

  5. 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数

    [源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...

  6. C# 7.0 新特性4: 返回引用

    本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...

  7. c++中有些重载运算符为什么要返回引用

    事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...

  8. c++中返回对象与返回引用的区别

    这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...

  9. js创建对象的三种方法:文本标识法和构造器函数法和返回对象的函数

    文本标识法和定义变量差不多,像这样 var obj = {name:'HanMM','2':'Dali'}; 函数构造器法  先创建一个对象函数 function Obj() { this.addre ...

随机推荐

  1. 系统调用表 linux 2.6.32

    [root@localhost log]# find / |grep syscall_table /usr/src/kernels/linux-/arch/x86/kernel/syscall_tab ...

  2. 多态VI的创建

    比较适合使用多态VI的场合:一个算法会应用到几种不同的数据类型上.比如读写 INI 文件的 VI,它 们既可以读写数值型的数据,也可以读写字符串.布尔等数据类型. 实现多态 VI 之前,一般先实现它的 ...

  3. C++实现多线程类Thread

    Windows编程中创建线程的常见函数有:CreateThread._beginthread._beginthreadex.据说在任何情况下_beginthreadex都是较好的选择. _begint ...

  4. html5 meta标签属性整理

    声明文档使用的字符编码 <meta charset='utf-8'> 声明文档的兼容模式 //指示IE以目前可用的最高模式显示内容<meta http-equiv="X-U ...

  5. SQLSERVER一些公用DLL的作用解释

    如果你的SQLSERVER安装在C盘的话,下面的路径就是相应SQLSERVER版本的公用DLL的存放路径 SQL2005 C:\Program Files\Microsoft SQL Server\9 ...

  6. 2014年的Google I/O app设计中的材料设计-渣渣的翻译

    又是一篇翻译,用了三个多小时.http://android-developers.blogspot.co.id/2014/08/material-design-in-2014-google-io-ap ...

  7. 使用反射让Spinner选择同一选项时触发onItemSelected事件

    翻看源码,Spinner判断是否触发onItemSelected,是在它的基类AdapterView里面做的: void checkSelectionChanged() { if ((mSelecte ...

  8. PIMP模式的理解

    看了[C++程序设计技巧]Pimpl机制 之后,想了半天才理解    // MyClass.h 2: class MyClassImpl; // forward declaration 3: clas ...

  9. C/C++随机数rand()和种子函数srand()

    在计算机编程中,常常要产生一个随机数.但是要让计算机产生一个随机数并不那么容易.计算机的执行,是以代码来进行的,所以并不可能像抽牌,扔骰子那样产生一个真正具有随机意义的数.只可能以一定的算法产生一个伪 ...

  10. WCF入门及在WinForm中动态调用

    一.WCF入门 1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序,删除系统生成的两个文件IService1.cs与Service1.svc, 添加自定义的WCF[服务文 ...