《C++ Primer》第五版课后习题解答_第六章(4)(27-35)
系统环境: 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,故函数陷入死循环。

浙公网安备 33010602011771号