博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《C++面向对象高效编程(第2版)》——3.16 从函数中返回引用
阅读量:7211 次
发布时间:2019-06-29

本文共 971 字,大约阅读时间需要 3 分钟。

本节书摘来自异步社区出版社《C++面向对象高效编程(第2版)》一书中的第3章,第3.16节,作者: 【美】Kayshav Dattatri,更多章节内容可以访问云栖社区“异步社区”公众号查看。

3.16 从函数中返回引用

C++面向对象高效编程(第2版)

要尽可能避免从函数返回引用。原因如下:

(1)能从函数安全返回对某对象的引用(假定为foo)时,该函数不能创建对象foo。否则,谁对新创建对象的存储区负责?因为它不能是局部对象,这意味着在调用foo()之前,

左值(L-value)语义的含义

左值可用在赋值操作符的左则(LHS)。例如,a = b表示a将被修改,而且它是一个左值。许多C++(和C)的操作符都要求正确地操作左值。所有其他操作符与赋值号结合的操作符,例如,+=/=等都是左值操作符。写a *= ba = a * b一样,对象a都将被修改。因此,a必须为左值。如果a是const,那么a*= b将不会通过编译,因为在这种情况下,a不能被修改(它不是一个左值)。在该例中,b是右值,可以从右值中读取数据。任何能作为左值使用的对象(或基本类型)都不能是const。操作符(=+=-=*=/= 等)都有左值语义。也就是说,左侧的对象将被修改,因此它必须为左值。

对象foo必须存在,甚至还应保证从函数返回后它仍然存在。

(2)函数(该函数返回对某对象的引用)如何表明被引用的对象创建失败?没有诸如空引用这样的东西,唯一可替代的方案就是抛出(throw)异常1。

有一些非常特殊的情况,需要从函数返回引用(而且要安全返回)。

通过现有对象调用某些函数,必须保证对象(调用函数的对象)至少在函数生存期内一直存在。在这种情况下,就可安全地返回对某对象的引用(实际上是this)。这主要用于赋值操作符(operator=)和一些具有左值语义的操作符中(如+=、=等),详见第8章。

hand 如果希望从函数多态返回,唯一的选择就是返回引用或者指针(后面章节将会介绍)。在这种情况下,按值返回不可用。

1实际上,当无法创建引用时,语言(实际上是编译器)自身会抛出异常(参见后续章节中关于RTTI——运行时类型识别的相关内容)。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

你可能感兴趣的文章
C 再识数组指针 指针数组的概念
查看>>
第5次作业
查看>>
倒计时
查看>>
JAVA必会算法--选择排序
查看>>
SEO基础问题:13.什么是关键词密度?
查看>>
Ruby gem install mysql 错误解决
查看>>
坑!!!
查看>>
web前端性能优化
查看>>
java基础-数组的折半查找原理
查看>>
挑战JavaScript正则表达式每日两题(2)
查看>>
个人网盘倒下去 企业网盘顶起来
查看>>
Redis的多种启动方式比较!
查看>>
C#读取excel文件数据丢失问题
查看>>
我的编程知识库
查看>>
【Linux实用技术】LFS6.3构建实录
查看>>
js实现页面跳转的几种方式
查看>>
块代码编程---开始使用块代码
查看>>
ASP.NET 发邮件方法
查看>>
分享:Arcadia 0.12.1 发布,Ruby 集成开发环境
查看>>
在ubuntu12.04上使用华为et127 3g上网卡
查看>>