格式:
类型标识符 &函数名(形参列表及类型说明){ //函数体 }
好处:
在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的。因为随着该局部变量生存期的结束,相应的引用也会失效,产生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++将“引用”作为函数返回值类型的格式、好处和注意事项?相关推荐

  1. C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)

    引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...

  2. C++代码片段(一)萃取函数返回值类型,参数类型,参数个数

    函数的类型主要集中在以下几种 函数指针 函数对象,是一个类对象,内部重载的operator()函数是一个函数指针 lambda,匿名函数对象,同函数对象 function对象 后三者都是类对象,可以看 ...

  3. “引用作为函数参数”与 “引用作为函数返回值”

    一.引用作为函数参数 作为函数参数时引用有两种原因: 1.在函数内部会对此参数进行修改:2.提高函数调用和运行效率. 关于第一点,都知道C++里提到函数就会提到形参和实参.如果函数的参数实质就是形参, ...

  4. c语言函数返回值类型必须,C++中函数类型与定义的函数返回值类型必须相同么?...

    C++中函数类型与定义的函数返回值类型必须相同么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! C++中函数类型与定义 ...

  5. c++_函数返回值,引用作为函数返回值

    catalog 函数返回值 返回值是`[const] T &` 返回值的类型是 T 返回的对象是 局部对象 实现原理 返回的对象是 全局对象 实例 函数返回值 返回值是[const] T &a ...

  6. python中map函数返回值类型_python map函数

    from:https://www.cnblogs.com/AlwaysWIN/p/6202320.html 描述 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序 ...

  7. c语言sizeof返回数据类型,sizeof函数返回值类型

    #include int main(void) { printf("type int has a size of (1)sizeof不是函数,它只是一个操作符(operator). (2)s ...

  8. python中map函数返回值类型_Python函数精解:map函数

    描述 map() 会根据提供的函数对指定序列做映射. 第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表. 语法 m ...

  9. python中map函数返回值类型_Python中的map

    map函数会根据提供的函数对指定序列做映射. map函数的定义: map(function, sequence[, sequence, ...]) -> list 通过定义可以看到,这个函数的第 ...

最新文章

  1. python numpy模块
  2. ubuntu 配置apt代理源
  3. ATM(BZOJ 1179)
  4. Spring中对于WebApplicationInitializer的理解
  5. jquery validate表单验证插件
  6. 【程序设计】函数参数
  7. python入门教程傻瓜版_毫无基础的人如何入门 Python ?Python入门教程拿走不谢啦!...
  8. 字节跳动(用户喜好)
  9. 戴尔计算机网卡驱动程序,dell戴尔网卡驱动如何安装
  10. 卷积码编码器matlab,卷积码的编解码matlab仿真.doc
  11. 这7种类型的食物可能引起 “痘痘”
  12. 计算机本体应用,本体评估方法研究综述
  13. 《Java8实战》第1章 Java 8、9、10 以及 11 的变化
  14. JS之数据结构与算法
  15. SIMCom常见模组外围电路设计
  16. 计算机视觉 国际著名研究机构
  17. 转载 STUDY 博客(2)
  18. Illum voluptatum suscipit dolor tempore est sequi.
  19. Fiddler抓包工的使用
  20. [Leetcode] 买卖股票合集(动态规划)

热门文章

  1. 计算机硬盘能否做u盘用怎么用,U盘能一直插在电脑上当硬盘用吗?
  2. linux识别fat16还是32,FAT16 、FAT32 、NTFS、LINUX区别.doc
  3. 选择之后触_发宜常梳:4种材质的梳子,我们最常用的梳子却对头发最不好,该如何选择?...
  4. Java、JavaEE、JavaSE、JavaME、JavaWEB之间有什么区别?
  5. Spring Boot集成Thymeleaf模板引擎
  6. VTK:交叉点 PolyData 过滤器用法实战
  7. wxWidgets:wxFTP类用法
  8. wxWidgets:wxBannerWindow类用法
  9. boost::spirit模块实现一个复数微生成器的测试程序
  10. boost::partial_sort相关的测试程序