C++返回引用的函数
要以引用返回函数值,则函数定义时的格式如下:
类型标识符&类型名 (形参列表及类型说明)
{ 函数体 }
用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++返回引用的函数的更多相关文章
- PHP:第三章——PHP中返回引用的函数
<?php header("Content-Type:text/html;charset=utf-8"); $i=1; function &F(){ global $ ...
- 基类中定义的虚函数在派生类中重新定义时,其函数原型,包括返回类型、函数名、参数个数、参数类型及参数的先后顺序,都必须与基类中的原型完全相同 but------> 可以返回派生类对象的引用或指针
您查询的关键词是:c++primer习题15.25 以下是该网页在北京时间 2016年07月15日 02:57:08 的快照: 如果打开速度慢,可以尝试快速版:如果想更新或删除快照,可以投诉快照. ...
- php函数返回引用示例
<?php class Test { public $userCache; public function init() { for($i = 0; $i < 5; $i++) { $us ...
- 【转】C/C++ 引用作为函数的返回值
转自:https://blog.csdn.net/weixin_40539125/article/details/81410008 这篇文章写的很好: 语法:类型 &函数名(形参列表){ 函数 ...
- 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数
[源码下载] 速战速决 (3) - PHP: 函数基础, 函数参数, 函数返回值, 可变函数, 匿名函数, 闭包函数, 回调函数 作者:webabcd 介绍速战速决 之 PHP 函数基础 函数参数 函 ...
- C# 7.0 新特性4: 返回引用
本文参考Roslyn项目中的Issue:#118. 1. C# 7.0 新特性1: 基于Tuple的“多”返回值方法 2. C# 7.0 新特性2: 本地方法 3. C# 7.0 新特性3: 模式匹配 ...
- c++中有些重载运算符为什么要返回引用
事实上,我们的重载运算符返回void.返回对象本身.返回对象引用都是可以的,并不是说一定要返回一个引用,只不过在不同的情况下需要不同的返回值. 那么什么情况下要返回对象的引用呢? 原因有两个: 允许进 ...
- c++中返回对象与返回引用的区别
这几天在做用C++做课程设计,对其返回对象的实现感到迷惑. 通过对汇编代码的分析,可以清楚的看到,直接返回引用和返回对象的区别到底是什么. 分析的程序如下 #include<cstdio> ...
- js创建对象的三种方法:文本标识法和构造器函数法和返回对象的函数
文本标识法和定义变量差不多,像这样 var obj = {name:'HanMM','2':'Dali'}; 函数构造器法 先创建一个对象函数 function Obj() { this.addre ...
随机推荐
- the forth assignment of software testing
软件测试用到的 pict33.msi. 加载安装即可. 顺步安装 使用背景: 假如现在有一个网站后台需要测试工程师进行测试用例设计.用常规的方法将参数列出: 帐户名: 空,不存在,超长,超短,正常 密 ...
- samba服务器与远程登录ssh
作者:相思羽 出处:http://www.cnblogs.com/xiang-siyu 欢迎转载,也请保留这段声明.谢谢! deepin安装与配置samba服务器 安装 apt-get insta ...
- nyoj 32 组合数
组合数 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描述 找出从自然数1.2.... .n(0<n<10)中任取r(0<r< ...
- 使用POI操作Excel使用小总结
1. Workbook维护一个调色板,可以自定义设置56种颜色,下标从8到63. 用到颜色的地方,可以输入下标获取颜色,如CellStyle的setFillForegroundColor(); 2.C ...
- ADO.NET连接数据库的两种方式
//实现了IDisposable接口的类,用using括起来 //插入数据 string connString = "Data Source=(local);Initial Catalog= ...
- memcache的分布式算法(转)
memcached的分布式 正如第1次中介绍的那样, memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能. 服务器端仅包括 第2次. 第3次 前坂介绍的内存存储功能,其实现 ...
- IntelliJ IDEA14 和 Maven 系列:使用IntelliJ IDEA 14和Maven 7 创建java web项目(一)
Intellij IDEA作为最好的Java IDE,创建Maven项目还是比较简单的,但是创建一个Maven Web项目还是要修改一些配置的,下面进行总结整理. 1前言 在创建项目中,IDEA提供了 ...
- 06_WebService与Socket的区别
[区别] 区别1. Socket是基于TCP/IP的传输层协议. WebService是基于HTTP协议传输数据的,HTTP是基于TCP的应用层协议. 区别2. WebService采用了基于HTTP ...
- 【制作镜像】virsh
首先进入到图形界面 常用virsh指令: 1)virsh list 列出当前虚拟机列表,不包括未启动的 2)virsh list --all 列出所有虚拟机,包括所有已经定义的虚拟机 3)virsh ...
- (zzuli)1907 小火山的宝藏收益
Description 进去宝藏后, 小火山发现宝藏有N个房间,且这n个房间通过N-1道门联通. 每一个房间都有一个价值为Ai的宝藏, 但是每一个房间也都存在一个机关.如果小火山取走了这个房间的宝藏, ...