c++primer笔记
加入光荣的进化吧
第六章! 函数
将函数指定为(内联函数 inline),将它在每个调用点上【内联的展开】,该说明只是向编译器发出一个请求,编译器可以选择忽略这个请求。
- 内联的机制用于优化规模较小,流程直接,频繁调用的函数。
constexpr函数是指能用于常量表达式的函数,函数的返回值类星和所有形参的类型必须是‘字面值类型’: 算数、引用、指针。 并且函数体内有且只有一条return语句。
- 将较小的操作,如比较两个字符串大小定义为函数,可以便于理解~;
- inline函数和constexpr函数可以在函数中多次定义,但通常定义在==头文件==中!
调试帮助:
assert and NEDBUG
assert预处理宏
- 预处理宏:就是一个预处理变量,行为类似内联函数。
assert(expr); 对expr求值,若为假(0),则输出信息并终止程序。若为真(非0),则什么也不做。
定义在 cassert头文件中。
- assert 依赖一个名为NDEBUG的预处理变量的状态。 如果定义了NDEBUG,则assert什么也不做。默认状态下,NDEBUG未定义,此时assert将执行运行时检查。
- 除了用于assert外,NDEBUG也可以用来编写自己的条件调试代码,如果NDEBUG未定义,将执行#ifndef和#endif之间的代码,如果定义了,则忽略这些代码。
C++编译器定义的调试有用的名字:
_ func _ :一个静态数组,存放函数的名字
_ FILE _ :存放文件名的字符串字面值
_ LINE _ :存放当前行号的整形字面值
_ TIME _ :存放文件编译时间的字符串字面值
_ DATE _ :存放文件编译日期的字符串字面值
函数匹配 : 重载函数调用时的选择
确定候选函数和可行函数
寻找最佳匹配
- 含有多个形参的函数匹配
- 候选函数:函数匹配的第一步是选定本次调用的重载函数集,集合中的函数被称为候选函数
- 可行函数:根据实参情况,从候选函数中挑选出能被这实参调用的函数,此次选出的函数被称为可行函数。
函数指针
函数指针指向的是函数并非对象。想要声明一个指向函数的指针只要用指针替代函数名即可
当我们把函数名当作一个值使用时,函数自动的转换为指针,直接赋予或者取址皆可。可以直接使用只想该函数的指针调用该函数。
…内容较复杂 日后再看!
第七章 类!
类的基本思想是【数据抽象data abstraction】和【封装encapsulation】.
数据抽象是一种依赖【接口interface】和【实现implementation】分离的编程技术。
- 类的接口包括用户所能执行的操作。
- 类的实现包括类的数据成员、负责接口实现的函数体以及定义类所需的各种私有函数
- 封装实现了类的接口和实现的分离。 封装后的类隐藏了他的实现细节。 类用户只能使用接口而无法访问实现部分。