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

原创 2017年01月14日 17:04:24

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)是错误的。


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++Primer第五版——习题答案+详解(完整版)

C++Primer第五版——习题答案详解       看的也比较快,但是有很多东西确实用不上,所以很多都没有深入的探讨,但是知识点覆盖的很全面,每一道题涉及的知识点我都写上简单的解释了。      ...
  • misayaaaaa
  • misayaaaaa
  • 2016年12月21日 16:11
  • 49230

C++Primer 中文版 第五版 第四章课后习题答案

前言:自己做的,如果有错误,要提出来哟... //4.1 105 //4.2 *(vec.begin()); *(vec.begin())+1; //4.3 可以接受..利大于弊嘛....
  • Little_boy_z
  • Little_boy_z
  • 2016年06月03日 18:24
  • 873

c++ primer第五版(中文)习题答案 第一章-开始

本博客知识记录自己学习中的笔记或者记录,如果有错误欢迎大家纠正。 写完第十章习题,开始从头开始,把前面的习题全部完成,书也顺序看下去。习题解答 1.1 查阅你使用的编译器的文档,确定它所使用的文件命...
  • xhxwd
  • xhxwd
  • 2015年10月22日 22:12
  • 7143

C++Primer 中文版 第五版 第三章课后习题答案

前言:自己做的,如果有错误,要提出来哟... //3.1 略 //3.2 /* #include using namespace std; int main() {   ...
  • Little_boy_z
  • Little_boy_z
  • 2016年06月03日 18:23
  • 1356

c++primer(第五版) 第十一章 关联容器习题答案

纯原创    转载请注明出处:http://blog.csdn.net/axuan_k 11.1    11.2     11.4 #include #include #inc...
  • AXuan_K
  • AXuan_K
  • 2016年03月07日 12:57
  • 1203

C++ Primer 中文版(第五版)课后题答案 事前说明

老师一直让我在csdn上做一个东西,具体什么东西都可以。我左思右想,决定先从身边的开始入手。那就是C++Primer这本书,刚开学学习的时候,从网上搜答案,怎么都搜不到,现在就服务人民,自己发一份答案...
  • Little_boy_z
  • Little_boy_z
  • 2016年06月01日 14:59
  • 578

C++Primer 中文版 第五版 第七章课后习题答案

//7.1 #include #include using namespace std; struct Sales_data { string bookNo; unsigned unit...
  • Little_boy_z
  • Little_boy_z
  • 2016年06月08日 20:07
  • 1709

java程序设计基础_陈国君版第五版_第六章习题

java程序设计基础_陈国君版第五版_第六章习题class Student{ int ID; String name; String sex; boolean leader; float g...
  • gaoenbin626
  • gaoenbin626
  • 2016年03月09日 10:27
  • 3143

C++Primer第五版 第十六章习题答案(51~60)

51:知识点1:可变函数模版就是指一个接受可变数目参数的模版函数或者模版类,可变数目的参数被称为参数包,分为两种:模版参数包,表示零个或多个模版参数,函数参数包,表示零个或多个函数参数 知识点2:C+...
  • misayaaaaa
  • misayaaaaa
  • 2017年03月18日 09:29
  • 1498

C++Primer中文(第五版)习题答案(英文)

----------------------- Page 1-----------------------       Answers For Programming Exercises in C...
  • u012432785
  • u012432785
  • 2016年08月01日 10:57
  • 790
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++Primer第五版 第六章习题答案(31~40)
举报原因:
原因补充:

(最多只允许输入30个字)