6.12:改写6.2.1节中的练习6.10的程序,使用引用而非指针交换两个整数的值。你觉得哪种方法更容易使用呢?为什么?

Ans:我觉得使用引用类型作为函数形参更好使用,因为引用形参在实参初始化它的时候就与实参绑定在一起了,所以在函数中对引用进行交换,实际上就是对实参进行交换,而使用指针的话,由于是通过值传递的,所以将实参的地址拷贝一份给形参作为指针的值,两者之间就是独立的,并且涉及到地址,如果对指针的值进行交换,结果不会影响到实参,但是如果是对指针指向的对象的值进行修改,还是会改变实参的值。

6.13:假设T是某种类型的名字,说明以下两个函数声明的区别:一个是void f (T),另一个是void f (T&)。

Ans:前者函数声明形参与实参之间是通过值传递的,通过拷贝的形式对形参进行初始化,而后者函数声明形参是引用类型,与实参之间是引用传递,形参与实参之间是绑定的。

6.14:举一个形参应该是引用的例子,在举一个形参不能是引用类型的例子。

Ans:当函数中形参参与的操作,需要对实参有影响时,形参应该是引用类型。当函数中形参参与的操作不会对实参有影响时,不能是引用类型。

6.15:说明find_char函数中的三个形参为什么是现在的类型,特别说明为什么s是常量引用而occurs是普通引用?为什么s和occurs是引用类型而c不是?如果令s是普通引用会发生什么情况?如果令occurs是常量引用会发生什么情况?

Ans:s是常量引用是因为s在函数中不需要修改其值,故应该是常量引用,而为什么它是引用类型,是因为它是string类型,为了避免拷贝过长的字符串

occurs是普通引用是因为它的值在函数中会改变,并且它之所以是引用,是要与实参绑定,返回时携带信息返回。如果它是常量引用,那么它编译会出错。

c不是引用类型,在该函数中c是不是引用其实都可以,但是由于c所占的字节很少,可以使用拷贝的方式初始化形参,还有由于不需要操作实参的值,所以不需要引用类型。s也可以是普通引用,只不过程序安全性降低。

 posted on 2018-08-14 17:10  linlh  阅读(87)  评论(0编辑  收藏  举报