C++Primer第五版 第六章习题(31~40)

2017-01-14 19:45:33来源:CSDN作者:misayaaaaa人点击

第七城市

31:

知识点1:返回的引用无效:局部临时变量或者局部对象的引用对于返回都是无效的,因为在函数终止之后,局部变量或者对象的引用不再指向有效的内存区域。若是常量在函数调用之前存在,引用即可用。

知识点2:可以对返回值是非常量引用的函数结果赋值。

举个例子:

#include <iostream>#include<string>using namespace std;char &Get_val(string &a, int ix)//函数的声明及定义,接受两个参数,返回类型为非常量引用,此处a是否为引用不大影响,最好是引用,节省内存{	return a[ix];//字符串某一位置的字母}int main(int argc, char *argv[]){		string s = "an apple ";	cout<<"字符串修改前为:"<<s<<endl;	Get_val(s,0) = 'A';//可以对非常量的引用返回值赋值	cout<<"字符串修改后为:"<<s<<endl;		return 0;//代表执行成功}

32:

正确的程序,返回的是数组第1~10个元素。


33:

知识点1:main()函数不可以调用它自己。

#include <iostream>#include<string>#include<vector>using namespace std;void Get_val(vector<int> a, int ix)//函数的声明及定义,接受两个参数{	if (ix != -1)	{		cout<<a[ix]<<endl;		ix--;		Get_val(a,ix);//递归	}}int main(int argc, char *argv[]){		int a[10] = {2,2,3,6,5,4,7,8,55,5};	vector<int> Example(a,a+10);	Get_val(Example,Example.size()-1);//注意下标从0开始	return 0;//代表执行成功}

34:

会出现val=0的情况,如果传入的参数为负数,那么将永远不会停止,所以判断条件最好不要用等号


35:

--在后是先用后减,达不到我们减一的目的。结果就是一直使用val循环


36:

知识点:由于数组不能被拷贝,所以函数不可以返回数组,但是我们可以返回函数的指针。利用的是类型别名的方法。

1、声明返回数组指针的函数:

例:对于函数的定义形式需要了解

int (*func(int val))[10];//括号要对,并且维数必须标明/************************************************************     type (*function_name(parameter list))[dimension] 逐层的理解:func(int i),名为func的函数有一个int型的参数i  (*func(int i)),表明我们可以对函数返回的结果进行解引用操作  (*func(int i))[10],表明对函数的解引用可以得到大小为10的数组  int (*func(int i))[10],表示数组中的元素是int类型************************************************************/

2、尾置返回类型(此为C++11新标准,有兴趣的可以研究下)

3、使用decltype,已知函数的返回值时,可以使用关键字decltype表示返回类型为指针


此题写法较为自由:

string (&func(string (&arrStr)[10]))[10]

37:

using ArrT = string[10];ArrT& func1(ArrT& arr);//使用类型别名auto func2(ArrT& arr) -> string(&)[10]; //使用尾置返回类型string arrS[10];decltype(arrS)& func3(ArrT& arr);//使用decltype关键字

个人觉得第二种方式比较好,既然是C++11的新标准,那么肯定有它创新的意义所在,简短方便


38:

decltype(arrStr)& arrPtr(int i){          return (i % 2) ? odd : even;}

39:

知识点1:函数的重载必须有形参数量或者形参类型上的不同

知识点2:顶层const不影响传入函数的对象

知识点3:此小节虽然只有一题,但是函数的重载是一个很重要的知识点,需要多看,深入理解

(a):错误,只是重复生命了

(b):错误

(c):正确


40:

知识点:一旦函数的某个形参被赋予了默认值,他后面所有的参数都必须有默认值

(b)是错误的。


第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台