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

系统环境: windows 10 1703

编译环境:Visual studio 2017


6.27

sum_all.h

#pragma once
#include 
using std::cout;
using std::endl;
using std::initializer_list;

int sum_all(initializer_list li);
sum_all.cpp

#include "sum_all.h"

int sum_all(initializer_list 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 
#include 

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

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

int main()
{
    vector 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,故函数陷入死循环。

你可能感兴趣的:(C++,Primer,习题)