《C++ primer》--第7章
删除指针后,该指针就变成了悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。
习题7.8 举一个例子说明什么时候应该将形参定义为引用类型。再举一个例子说明什么时候不应该将形参定义为引用。
解答:
如果希望通过函数调用修改实参的值,就应该将形参定义为引用类型。
例如,用swap函数交换两数的值。如果不将形参定义为指针类型,则需要直接修改实参的值,应该将形参定义为引用类型:
void swap(int &v1 , int &v2)
{
int temp = v2;
v2 = v1;
v1 = temp;
}
除了swap函数这种情况外,为了通过一次函数调用获得多个结果值,也可以使用引用形参。
另外,在向函数传递大型对象时,为了避免复制实参以提高效率,以及使用无法复制的类类型(其复制构造函数为private的类类型)作为形参类型时,也应该将形参定义为引用类型。但这时使用形参的目的是为了避免复制实参,所以应该将形参定义为const引用。
如果不需要通过函数调用修改实参的值,就不应该将形参定义为引用类型。例如,在求绝对值的函数abs中,形参就不宜定义为引用类型。
习题7.11 何时应将引用形参定义为const对象?如果在需要const引用时,将形参定义为普通引用,则会出现什么情况?
解答:
如果使用引用形参的唯一目的是避免复制实参,则应将引用形参定义为const对象。
如果在需要const引用时,将形参定义为普通引用,则会导致不能使用右值和const对象,以及需要进行类型转换的对象来调用该函数,从而不必要地限制了该函数的使用。
习题7.12 什么时候应使用指针形参?什么时候应使用引用形参?解释两者的优点和缺点。
解答:
当函数需要处理数组且函数体不依赖于数组的长度时应使用指针形参,其他情况下应使用引用形参。
指针形参的优点是可以明确地表示函数所操纵的是指向数组元素的指针,而不是数组本身,而且可以使用任意长度的实参数组来调用函数;其缺点是函数体不能依赖于数组的长度,否则容易造成数组内存的越界访问,从而产生错误的结果或者导致程序崩溃。
引用形参的有点事在函数体中依赖数组的长度时安全的;其缺点是限制了可以传递的实参数组,只能使用长度匹配的实参数组来调用函数。
习题7.17 什么时候返回引用是正确的?而上面时候返回const引用是正确的?
解答:
返回指向在函数调用之前已存在的对象的引用时正确的。
当不希望返回的对象被修改时,返回const引用是正确的。
- 关于JVM CPU资源占用过高的问题排查
- ActiveMQ简单介绍以及安装
- Java Process destroy方法kill进程,返回码测试
- 百度人脸识别API Java调用
- Java Socket Timeout总结
- 求一个数组中子数组的最大和算法(Java实现)
- JDBC批量提交SQL的几点问题解答
- 工具推荐: 汽车CAN总线分析框架CANToolz
- Windows下jps, jconsole无法查看本地java进程问题解决
- DateFormat 线程不安全
- zip文件操作导致JVM crash
- 如何搭建你自己的“深度学习”机器?
- MySQL INSERT INTO...ON DUPLICATE KEY UPDATE的使用
- 通过Java代码来模拟乘法器
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- sas神经网络:构建人工神经网络模型来识别垃圾邮件
- R语言多分类logistic逻辑回归模型在混合分布模拟单个风险损失值评估的应用
- 10分钟带你入门git到github
- 微服务[学成在线] day18:基于oauth2实现RBAC认证授权、微服务间认证实现
- 【TBase开源版测评】分布式事务全局一致性
- R语言进阶之主成分分析
- 二胖写参数校验的坎坷之路
- 图像倾斜校正算法的MATLAB实现:图像倾斜角检测及校正
- R语言时间序列数据指数平滑法分析交互式动态可视化
- R语言进阶之图形的合并
- R语言广义线性模型索赔频率预测:过度分散、风险暴露数和树状图可视化
- 还在使用Future轮询获取结果吗?CompletionService快来了解下。
- R语言通过伽玛与对数正态分布假设下的广义线性模型对大额索赔进行评估预测
- R语言精算学:使用链梯法Chain Ladder和泊松定律模拟和预测未来赔款数据
- 微服务[学成在线] day19:分布式事务