1、static 静态 存储在静态存储区
- 类的成员变量,属于该类的所有实例对象
- 类的成员函数,属于该类的所有实例对象
- 静态全局变量,只在当前文件有效
- 静态全局函数,只在当前文件有效
2、inline
放在函数定义前变成内联函数,内联函数就是空间换时间的函数
内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,这与一般函数不同,主函数在调用一般函数的时候,是指令跳转到被调用函数的入口地址,执行完被调用函数后,指令再跳转回主函数上继续执行后面的代码;而由于内联函数是将函数的代码直接放在了函数的位置上,所以没有指令跳转,指令按顺序执行。
什么时候使用内联函数、什么时候不使用呢?
- 代码量短,功能简单、时长被调用,比如循环中的函数,建议设计成内联函数
- 相反的,内容多,递归函数,不能设计成内联函数怒
3、const
const的核心思想是只读。
- 对于一个我们不会再修改的变量,可以声明为const,通常需要对它进行初始化,因为以后就没有机会再去改变它了
- 在一个函数声明中,const可以修饰形参,表明它是一个输入参数,在函数内部不能改变其值
- 修饰类的成员函数,若指定其为const类型,则表明其是一个常函数,不能修改类的成员变量。
- 对于类的成员函数,有时候必须指定其返回值为const类型,以使得其返回值不为“左值”
4、extend C
C和C++对函数的处理方式是不同的。比如重载函数C语言是没有的,生成可执行文件的过程处理方法C++和C语言是不一样的。extern "C"是使C++能够调用C写作的库文件的一个手段,如果要对编译器提示使用C的方式来处理函数的话,那么就要使用extern "C"来说明。
5、define
宏定义,在预处理阶段展开,用define定义的内容进行了替换,没有类型,不做任何类型检查,不会分配内存
6、四种强制类型转换
static_cast
静态转换,在编译期确定的转换
用法:
- 基本数据类型的转换
- 将表达式转换成void类型
- 可以用于void* 和其他指针类类型之间的转换,但是不能用于两个无关指针类型的直接转换
- 可以用于类继承结构中基类和派生类之间指针或引用的转换,向上转型安全,向下转型由于没有动态类型检查,是不安全的。
dynamic_cast
动态转换,会在运行时进行类型检查
用法
- 基类和派生类之间指针或引用的转换,类中必须要有虚函数
const_cast
常量转换
用法
- 修改一个指针的常量性
reinterpret_cast
内存数据的重新解释
用法
- 不同基础类型指针类型之间转换
- 基础类型指针与类对象指针之间的转换
- 将地址值转换成整数