删除指针后,该指针就变成了悬垂指针。悬垂指针指向曾经存放对象的内存,但该对象已经不再存在了。
习题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引用是正确的。
本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3220228.html,如需转载请自行联系原作者