您的位置:首页 > 编程语言 > C语言/C++

《C++ Primer》第五版课后习题解答_第六章(4)(27-35)

2017-09-20 09:48 260 查看
系统环境: windows 10 1703

编译环境:Visual studio 2017

6.27

sum_all.h

#pragma once
#include <iostream>
using std::cout;
using std::endl;
using std::initializer_list;

int sum_all(initializer_list<int> li);
sum_all.cpp

#include "sum_all.h"

int sum_all(initializer_list<int> li)
{
int sum = 0;
for (auto ival : li)
{
sum += ival;
}
return sum;
}
sum_allMain.cpp

#include "sum_all.h"
using std::cout;
using std::endl;

int main()
{
int ans = 0;
ans = sum_all({ 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 });
cout << ans << endl;
return 0;
}


6.28

elem 的类型为 const string&

6.29

取决于 initializer_list 中所含元素的类型。如果元素类型为 int 等可以被快速拷贝的类型,则可以不声明成引用类型。否则,就需要声明成引用类型以防在拷贝时拉低代码运行效率。

6.30

编译器报错如下:

error C2561: 'str_subrange': function must return a value


6.31

(1) 当返回的引用是局部对象的引用时,该引用是无效的。以为当函数终止时,局部变量的引用将指向不再有效的内存区域

(2) 当函数内部对常量引用进行拷贝或赋值等操作时,返回常量的引用将无效。

6.32

函数合法,但是 main 函数应该添加 return 0 语句。

函数功能是给数组 ia 赋值 0~9。

6.33

#include <iostream>
#include <vector>

using std::cout;
using std::endl;
using std::vector;

int Adam_print(vector<int>::const_iterator b, vector<int>::const_iterator e)
{
if (b != e)
{
cout << *b;
return Adam_print(++b, e);
}
}

int main()
{
vector<int> ivector = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
Adam_print(ivector.begin(), ivector.end());
return 0;
}

6.34
当输入的数是正整数时,函数结果将不会改变。计算过程会在原先的基础上多乘一次 1;

当输入的数为负数时,函数将会被一直调用,陷入死循环。

6.35

如果传入 val--,实际上再次调用的数值仍为 val,故函数陷入死循环。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: