C++Primer plus读书笔记与心得
2020年过年期间,因新型冠状肺炎影响,推迟复工。根据公司读书计划,将c++ primer plus 这本书复习了一遍,并将其中一些章节中自己记忆模糊或者之前学习没注意到的学习点记录如下:
函数探幽(223)
-
内联函数
因函数调用存在开销(函数切换需要记录跳跃点,需要一些压栈和寄存器操作),所以在函数实现耗时较小时且频繁被调用且非递归调用,可以选择使用内联函数节省开销。
注意:内联函数是在预编译阶段确定的(底层实现宏),具体实现的内联函数是否真实被当作内敛函数使用,由编译器根据一定规则决定 -
引用变量
引用: 常性被引用类型的指针;当实参类型不确定或者与形参类型不匹配或表达式时,形参引用的是临时变量,函数调用完释放;当函数调用的参数需要用到结构体作为实参传递时,形参最好用引用,减少拷贝;函数的返回值如果是引用,不能返回函数中临时变量,会造成崩溃,此时需要以对象返回,通过构造临时变量; -
默认参数
-
函数重载
重载要求:1 参数数目 2 参数类型 3 参数排序 不同,与参数返回值无关。
多态:运行时多态:函数重载&虚函数;编译时多态:模板函数的模板类型实例化
注意:类型引用和类型被视为一样; const 修饰的区别也可造成重载,当实参和形参都有const时,优先选择const形参的函数,当实参有const 形参无const时,编译报错,当实参无const, 形参有const时,可以使用形参为const的函数。具体见下例
-
模版函数
函数模板的重载,编译器选择原型时,非模板函数 > 显示具体化 > 通用模板函数
内存模型和名称空间
- 单独编译
gcc只编译cpp文件,在预编译时期将.h文件和cpp文件结合生成临时的.cpp文件,编译器单独编译cpp文件生成.o对象文件,链接器将对象文件链接后生成可执行文件。
Ifndef define endif 在头文件定义使用的必要性。 - 存储持续性,作用域,链接性
-
register可建议编译器将变量放在寄存器中,但实际如何由编译器决定,对于放入寄存器的变量,不能取地址操作。
-
静态变量只初始化一次并且只能使用常量表达式进行初始化,并且存活周期是整个程序执行期间,默认初始值为0,作用域根据情况定:静态局部变量—函数内可见;静态全局变量—本文件可见;非静态全局变量–其他文件也可见,需要extend声明下
-