inline内联函数
简单来说,编译器将inline函数体代码直接复制到inline函数调用点处而非普通函数的函数调用,有点像宏但是比宏更安全会,会做安全检查或自动类型转换。
特点:
省去了参数压栈、栈帧开辟与回收,结果返回等,加快运行速度;
大多类的成员函数(没有循环递归、定义在内类或显示内联等)会自动转化为内联函数;
但是也会造成代码膨胀、版本迭代不便、程序员不可控缺点。
virtual虚函数
- 普通虚函数
一般讲到虚函数大家都会告诉你创建了一张虚表Vtable,实现了多态的机制。
那什么是多态机制呢?就是父类指针可以直接指向子类实例,通过父类的指针调用实际子类的成员函数,实现父类的多种形态。
那为什么父类指针可以直接指向子类实例呢?这就是虚表的功劳了,子类对应的虚表中首先写入父类函数地址,如果有同名同参函数则替代相应函数地址,也就是说子类虚表中包含任何父类可调用函数的地址(或替换地址)。
特点:
构造函数不是虚函数,析构函数是虚函数; - 纯虚函数
C++中包含纯虚函数的类,被称为是“抽象类”。抽象类不能使用new出对象,只有实现了这个纯虚函数的子类才能new出对象。纯虚函数“只提供申明,没有实现”,纯虚函数必须在子类(sub class)中实现该函数才可以使用。
特点:
不能被实例化
static静态函数、变量
- 静态变量
全局静态变量:与普通全局变量不同,普通全局变量对全局所有文件可见,容易出现重名混淆等问题,static则不必担心命名冲突。
局部静态变量:生存期为整个源程序,但是其作用域仍与自动变量相同,只能在定义该变量的函数内使用该变量。
静态变量默认初始化为0。 - 静态成员函数
特点:
类的静态成员函数是属于整个类而非类的对象;
不能将静态成员函数定义为虚函数;
初始化在类体外进行,而前面不加static,以免与一般静态变量或对象相混淆。