C++ Primer 6章习题

6.1 实参是形参的初始值
6.2
(a) 函数类型和返回值不匹配
(b) 没有函数类型
(c) 括号不完整
(d) 函数体缺少括号
6.3-6.4

int fact(void)
{
    int res=1,num=1;
    cout << "输入一个整数,求他的阶乘" << endl;
    cin >> num;
    while (num > 1)
    {
        res *= num;
        --num;
    }
    return res;
}

6.5

void stupid_output(int temp)
{
    cout << temp << endl;
}

6.6 形参由实参来初试化
局部变量在函数开始执行的时候初始化,函数结束的时候销毁
局部静态变量在函数第一次被调用的时候初始化,在整个程序结束的时候销毁
6.7

int stupid_return()
{
    static int cnt;
    return cnt++;
}

6.8-6.9略
6.10

void stupid_exchange(int* a, int* b)
{
    int temp;
    temp = *a;
    *a = *b;
    *b = temp;
}

6.11

void stupid_reset(int &temp)
{
    temp = 0;
}

6.12-6.15略
6.16 形参缺少const
6.17 不同,一个需要修改原对象,另一个不需要
6.18 bool compare(matrix a,matrix b);
vector change_val(int,vector)
6.19 (a)参数数量不一致
(b)正确
(c)正确
(d)正确
6.20 不修改原对象的时候使用常量引用,可能导致一些常量参数无法使用
6.21-6.23略
6.24 10会被忽略,其他长度的数组也可传入,可能会有错误。
6.25-6.26

#include"stupidsource.h"
#include<iostream>
#include<string>
#include<vector>

using namespace std;

int main(int argc, char* argv[])
{
    for (int i = 1; i < argc; ++i)
    {
        cout << argv[i] << endl;
    }
    return 0;
}

6.27

int ini_add(initializer_list<int> a)
{
    int sum = 0;
    for (const auto &c : a)
        sum += c;
    return sum;
}

6.28 string
6.29 ??不懂答案的意思
6.30 函数必须返回值
6.31 引用的是局部变量的情况下;常量被销毁的情况下(同之前);
6.32 合法
6.33 略
6.34 返回0,负数也可以运行。
6.35 可能造成未定义的情况出现。
6.36 string (&stupid())[10];
6.37 (a)string a[10];
decltype(a) &stupidb();
(b)using sb=string[10];
sb &stupid();
(c)auto stupid()->string(&)[10];
6.38
decltype(odd) &arrPtr(int i)
{
return (i % 2) ? odd : even;
}
6.39
(a)错误,顶层const无法区分
(b)错误,只有返回类型不一样
(d)正确
6.40 (b)错,赋予默认值之后的所有形参都需要有默认值
6.41 (a)非法,(c)不合初衷
6.42 略
6.43 (a)在头文件中,因为是内联函数。
6.44

inline bool isShoter(const string &s1, const string &s2)
{
    return s1.size() < s2.size();
}

6.45 略
6.46 不能,返回的不是常量表达式。
6.47 略
6.48 不合理。cin有可能无效
6.49 于被调用函数名相同,在调用处可见的函数
可以被这组实参调用的函数。
6.50 (a)二义性
(b)-(d)无二义性
6.51 略
6.52 (a)类型提升
(b)算术转换
6.53 (c)会产生二义性。
6.54-6.56

#include"stupidsource.h"
#include<iostream>
#include<string>
#include<vector>

using namespace std;

int add(int, int);
int sub(int a, int b);
vector<int(*)(int, int)> vec;

int main(int argc, char* argv[])
{
    vec.push_back(add);
    vec.push_back(sub);
    for (auto c : vec)
        cout << c(4, 5) << endl;
    return 0;
}

int add(int a, int b)
{
    return a + b;
}

int sub(int a, int b)
{
    return a - b;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值