MISAYAONE的博客

坚持、果敢、勤思、沉淀

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

31:

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

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

举个例子:

#include <iostream>
#include<string>
using namespace std;

char &Get_val(string &a, int ix)//函数的声明及定义,接受两个参数,返回类型为非常量引用
{
	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)是错误的。


阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/misayaaaaa/article/details/53998504
个人分类: 【C++Primer习题】
上一篇C++Primer第五版 第六章习题答案(11~20)
下一篇最好用的截图软件Faststone Capture 6.9 安装包及注册码
想对作者说点什么? 我来说一句

c++primer第五版习题答案(全)

2015年08月19日 374KB 下载

c++primer第五版中文版练习题答案

2014年10月15日 3.01MB 下载

没有更多推荐了,返回首页

关闭
关闭