C++将“引用”作为函数返回值类型的格式、好处和注意事项?
格式:
类型标识符 &函数名(形参列表及类型说明){ //函数体 }
好处:
在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生runtime error!
注意事项:
(1)不能返回局部变量的引用。这条可以参照Effective C++[1]的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。
(2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++[1]的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。
(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++[1]的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如
C++将“引用”作为函数返回值类型的格式、好处和注意事项?相关推荐
- C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)
引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...
- C++代码片段(一)萃取函数返回值类型,参数类型,参数个数
函数的类型主要集中在以下几种 函数指针 函数对象,是一个类对象,内部重载的operator()函数是一个函数指针 lambda,匿名函数对象,同函数对象 function对象 后三者都是类对象,可以看 ...
- “引用作为函数参数”与 “引用作为函数返回值”
一.引用作为函数参数 作为函数参数时引用有两种原因: 1.在函数内部会对此参数进行修改:2.提高函数调用和运行效率. 关于第一点,都知道C++里提到函数就会提到形参和实参.如果函数的参数实质就是形参, ...
- c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...
C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义 ...
- c++_函数返回值,引用作为函数返回值
catalog 函数返回值 返回值是`[const] T &` 返回值的类型是 T 返回的对象是 局部对象 实现原理 返回的对象是 全局对象 实例 函数返回值 返回值是[const] T &a ...
- python中map函数返回值类型_python map函数
from:https://www.cnblogs.com/AlwaysWIN/p/6202320.html 描述 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序 ...
- c语言sizeof返回数据类型,sizeof函数返回值类型
#include int main(void) { printf("type int has a size of (1)sizeof不是函数,它只是一个操作符(operator). (2)s ...
- python中map函数返回值类型_Python函数精解:map函数
描述 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 语法 m ...
- python中map函数返回值类型_Python中的map
map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function, sequence[, sequence, ...]) -> list 通过定义可以看到,这个函数的第 ...
最新文章
- python numpy模块
- ubuntu 配置apt代理源
- ATM(BZOJ 1179)
- Spring中对于WebApplicationInitializer的理解
- jquery validate表单验证插件
- 【程序设计】函数参数
- python入门教程傻瓜版_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!...
- 字节跳动(用户喜好)
- 戴尔计算机网卡驱动程序,dell戴尔网卡驱动如何安装
- 卷积码编码器matlab,卷积码的编解码matlab仿真.doc
- 这7种类型的食物可能引起 “痘痘”
- 计算机本体应用,本体评估方法研究综述
- 《Java8实战》第1章 Java 8、9、10 以及 11 的变化
- JS之数据结构与算法
- SIMCom常见模组外围电路设计
- 计算机视觉 国际著名研究机构
- 转载 STUDY 博客(2)
- Illum voluptatum suscipit dolor tempore est sequi.
- Fiddler抓包工的使用
- [Leetcode] 买卖股票合集(动态规划)
热门文章
- 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
- linux识别fat16还是32,FAT16 、FAT32 、NTFS、LINUX区别.doc
- 选择之后触_发宜常梳:4种材质的梳子,我们最常用的梳子却对头发最不好,该如何选择?...
- Java、JavaEE、JavaSE、JavaME、JavaWEB之间有什么区别?
- Spring Boot集成Thymeleaf模板引擎
- VTK:交叉点 PolyData 过滤器用法实战
- wxWidgets:wxFTP类用法
- wxWidgets:wxBannerWindow类用法
- boost::spirit模块实现一个复数微生成器的测试程序
- boost::partial_sort相关的测试程序