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


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

相关文章推荐

Based Graph 推荐算法学习

Pagerank算法是和query无关的,计算 top sensitive pagerank值,可以用叠代的方法,即 f(t+1) = alpha * P*f(t) +(1-alpha)*y  上面...
  • litoupu
  • litoupu
  • 2014年02月17日 15:17
  • 1687

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

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

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

31: #include #include #include #include using namespace std; class Hasptr1 { friend void swap(Ha...

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

后面的题目主要是进行练习,即使是照搬书本上的例子,也要做一做 31:知识点1:继承体系:is  a ,和has  a 的区别。 知识点2:将层次关系隐藏与接口类之中,保存一个基类(抽象基类)派生类...

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

31:知识点1:容器的改变可能会使迭代器失效,插入和删除各有其相关的规则,P315. 知识点2:必须保证每次改变容器的操作之后都正确的重新定位迭代器的操作 知识点3:调用erase()之后,其返回的迭...

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

31:知识点:unique_copy()去掉了重复元素 #include #include #include #include #include #include #include...

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

31:unique_p是保存删除器函数的指针,所以需要一次跳转操作,并不会内联而是跳转 32:知识点1:从函数实参到模版实参的过程被称为模版实参推断,在这个过程中,可能会发生类型转换 知识点2:只...

C++Primer第五版 第十一章习题答案(31~38)

31:知识点:在multimap中,具有相同关键字的元素会相邻存储 #include #include #include #include #include #include #incl...

C++Primer第五版 第四章习题答案(31~38)

1:对于逗号运算符,运算顺序是从左到右。前置是先操作,后使用,后置是先使用后操作。 #include #include #include using namespace std; void ma...

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

//6.1 看概念吧,实在是太复杂了。 //6.2 a:返回类型不对 b:没有定义返回值 c:花括号和两个一样了 d:花括号 //6.3 #include using na...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++Primer第五版 第六章习题答案(31~40)
举报原因:
原因补充:

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