说起静态绑定和动态绑定,我们⾸先要知道静态类型和动态类型,静态类型就是它在程序中被声明时所采⽤的类型,在编译期间确定。动态类型则是指“⽬前所指对象的实际类型”,在运⾏ 期间确定。
静态绑定,⼜名早绑定,绑定的是静态类型,所对应的函数或属性依赖于对象的静态类型,发⽣在编译期间。
动态绑定,⼜名晚绑定,绑定的是动态类型,所对应的函数或属性依赖于动态类型,发⽣在运⾏期间。
⽐如说, virtual 函数是动态绑定的,⾮虚函数是静态绑定的,缺省参数值也是静态绑定的。这呢,就需要注意,我们不应该新定义继承⽽来的缺省参数,因为即使我们重定义了,也不会起到效果。因为⼀个基类的指针指向⼀个派⽣类对象,在派⽣类的对象中针对虚函数的参数缺省值进行了重定义,但是缺省参数值是静态绑定的,静态绑定绑定的是静态类型相关的内容,所以会出现⼀种派⽣类的虚函数实现⽅式结合了基类的缺省参数值的调⽤效果,这个与所期望的效果不同。