第六章 6.5.3节练习 & 6.6节练习

练习6.47

改写6.3.2节(第205页)练习中使用递归输出vector内容的程序,使其有条件地输出与执行过程有关信息。例如,每次调用是输出vector对象的大小。分别在打开和关闭调试器的情况下编译并执行这个程序。

解答:

这里具体的程序就不写了,216页有例程可以参考。

在VS中命令行定义宏的方式和linux下命令行有区别,/DXXX,在书中216页中也有提到。


练习6.48

说明下面这个循环的含义,它对assert的使用合理吗?

string s;

while(cin >> s && s != sought){}//空函数体

assert(cin);

解答:

不合理,这里判断的是标准输入是否为空,或者是否读到最末尾。

在while循环中cin已经读完了,已经为空或者到了结尾。

所以,这里的assert肯定会被触发。


练习6.49

什么是候选函数?什么是可行函数?

解答:

【引用】函数匹配的第一步就是选定本次调用对应的重载函数集,集合中的函数称为候选函数。

【引用】从候选函数中选出能被这组实参调用的函数,称为可行函数。


练习6.50

已知有第217页对函数f的声明,对于下面的每一个调用列出可行函数。其中那个函数是最佳匹配?如果调用不合法,是因为没有可匹配的函数还是因为调用具有二义性?

(a) f(2.56, 42);

(b) f(42);

(c) f(42, 0);

(d) f(2.56, 3.14);

解答:

(a) 有二义性。不确定是掉f(double, double = 3.14),还是f(int, int).

(b) 合法,和f (int)匹配

(c) 合法,和f (int, int)匹配

(d) 合法,和f(double, double=3.14)匹配


练习6.51

编写函数f的四个版本,令其个输出一条可以区分的消息。验证上一个练习的答案,如果你回答错了,反复研究本节的内容直到你弄清楚自己错在何处。

解答:

void f(){}
void f(int){}
void f(int, int){}
void f(double, double = 3.14){}

int main(){
	f(2.56, 42);
	f(42);
	f(42, 0);
	f(2.56, 3.14);
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值