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;
}