C++Primer第五版 第六章习题答案(41~50)
来源:互联网 发布:淘宝童装一件代理货源 编辑:程序博客网 时间:2024/05/17 09:22
41:知识点1:函数反复调用的过程中重复出现的形参,这样的值被称为默认实参。该参数在使用过程中可以被用户指定,也可以使用默认数值
知识点2:调用含有默认实参的函数时,可以包含该实参,也可以省略该实参。
知识点3:一旦某个形参被赋予了默认值,其后所有形参都必须有默认值。
知识点4:顺序很重要!在设计函数时,将默认值的形参放在后面。
知识点5:在给定的作用域中,一个形参只能被赋予一次默认实参,且局部变量不能作为默认实参。
(a):ht需要提供实参
(b):合法
(c):合法,但是wd会被赋予*号
42:知识点1:返回的值用于初始化调用点的一个临时量,该临时量就是函数的调用结果——值是如何被返回的?
此题考查默认实参的应用
#include <iostream>#include<string>#include<vector>using namespace std;string make_plural(size_t ctr, const string& word, const string& ending = "s")//此处觉得题目描述有误,应该是第三个形参赋予"s",应为是字符串。{//size_t表示的是unsigned intreturn (ctr > 1) ? word+ending : word;}int main(int argc, char *argv[]){cout<<"两单词的单数形式:"<<make_plural(1,"success","es")<<" "<<make_plural(1,"failure")<<endl;cout<<"两单词的复数形式:"<<make_plural(2,"success","es")<<" "<<make_plural(2,"failure")<<endl;return 0;//代表执行成功}
43:知识点1:将函数指定为“内联函数(inline)”,将它在每个调用点上“内联的展开”,该说明只是向编译器发出一个请求,编译器可以选择忽略这个请求。内联的机制用于优化规模较小、流程直接、频繁调用的函数,建议不大于75行。
知识点2:constexpr函数是指能用于常量表达式的函数:函数的返回值类型和所有形参的类型必须是“字面值类型”:算术、引用、指针。并且函数体内有且只有一条return语句。
知识点3:将较小的操作如比较两个字符串的大小定义为函数,有很多的优点。
知识点4:inline函数和constexpr函数可以在函数中多次定义,但是通常将其定义在头文件中。
(a):放在头文件中,为inline函数
(b):放在头文件中,即使是普通函数,放在头文件中也是较好的
44:直接在函数的返回类型之前加上inline即可。
45:具体是否应被定义为内联函数,参照知识点1中的标准。
46:参照知识点2关于constexpr的定义,可以。直接在函数的返回类型之前加上constexpr
47:程序的调试帮助:assert和NDEBUG
知识点1:预处理宏assert(expr):包含一个表达式,expr为真时,assert什么也不做,为假时输出信息并终止程序。包含在cassert头文件中。通常用于检查不能发生的条件
知识点2:assert依赖于一个NDEBUG的预处理变量的状态,如果定义了NDEBUG,assert什么也不做,默认状态下NDEBUG是未定义的。编译器也可以预先定义该变量。
知识点3:也可以使用NDEBUG编写自己的条件调试代码,如果NDEBUG未定义,将执行#ifndef到#endif之间的代码,如果定义了NDEBUG,这些代码将被忽略。
void pp(){ #ifndef NDEBUGcerr<<"my name is:"<<__func__<<endl; #endif//其他代码}
一些C++编译器定义的调试有用的名字:
_ _func_ _ :一个静态数组,存放函数的名字
_ _FILE_ _ :存放文件名的字符串字面值
_ _LINE_ _ :存放当前行号的整形字面值
_ _TIME_ _ :存放文件编译时间的字符串字面值
_ _DATE_ _ :存放文件编译日期的字符串字面值
#include <iostream>#include<string>#include<vector>using namespace std;void printVec(vector<int>& vec){#ifndef NDEBUGcout << "vector size: " << vec.size() << endl;#endifif (!vec.empty()) {auto tmp = vec.back();vec.pop_back();printVec(vec);cout << tmp << " ";}}int main(int argc, char** argv){vector<int> vec{1, 2, 3, 4, 5, 6, 7, 8, 9};//c++11特性printVec(vec);cout << endl;return 0;}
48:不合理,只要有输入,则assert一直为真,无意义。最好用于检查不能发生的条件
assert(s = sought);
49:知识点1:候选函数:函数匹配的第一步是选定本次调用的重载函数集,集合中的函数被称为候选函数
知识点2:根据实参情况,从候选函数中挑选出能被这实参调用的函数,此次选出的函数被称为可行函数。
函数匹配:重载函数调用时的选择。
50:根据实参匹配情况
(a):不合法,42为int
(b):合法
(c):合法
(d):合法
- C++Primer第五版 第六章习题答案(41~50)
- C++Primer 中文版 第五版 第六章课后习题答案
- C++Primer第五版 第六章习题答案(1~10)
- C++Primer第五版 第六章习题答案(11~20)
- C++Primer第五版 第六章习题答案(31~40)
- C++Primer第五版 第六章习题答案(21~30)
- C++Primer第五版 第六章习题答案(51~56)
- C++Primer(第五版) 习题答案
- C++Primer第五版 第七章习题答案(41~50)
- C++Primer第五版 第九章习题答案(41~50)
- C++Primer第五版 第十三章习题答案(41~50)
- C++Primer第五版 第十六章习题答案(41~50)
- c++primer第五版课后练习答案(第六章)
- C++Primer 中文版 第五版 第五章课后习题答案
- c++ primer(第五版)学习笔记及习题答案代码版(第六章)函数
- c++ primer第五版(中文)习题答案 第十章第六节-特定容器算法
- c++ primer第五版(中文)习题答案 第二章第六节-自定义数据结构
- c++ primer第五版(中文)习题答案 第三章第六节-多维数组
- Java面试基础
- pdf.js学习笔记
- C# 高亮任务栏图标的方法,非系统托盘的图标闪烁效果.
- Android的性能优化
- 谷歌地图开发:地图对象操作
- C++Primer第五版 第六章习题答案(41~50)
- 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
- 模拟支付宝支付
- adb devices 返回 XXX offline 的解决办法
- Linux学习笔记4 file,文件系统,mkdir,tree,rm,rmdir,touch
- 【openFrameworks】
- java线程同步原理
- C# 网络编程(二)
- Android AsyncTask 在onPreExecute方法中弹出加载框