《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,故函数陷入死循环。