2016-04-12
1、C++中的静态编译和动态编译分别基于什么机制实现?
首先,静态编译和动态编译都属于C++中的多态,即“一种接口,多种实现”。
静态编译(/联编) —— 也称为 静态多态 如:函数的重载和运算符的重载
动态编译(/联编 ) ——也称为运行时多态 如:虚函数
多态规则:
通过基类指针或引用调用成员函数时
如果函数是非虚函数,采用静态编译(即:编译时绑定)。
如果函数是虚函数,采用动态编译(即:运行时绑定)。
--- 动态联编
指的是被调函数的入口地址是在运行时才确定的。
** C++实现动态联编是基于 虚指针(vptr) 和 虚函数表(vtable)
具体为:
a. 为每一个包含虚函数的类建立一个虚函数表,表中存放的是各虚函数在内存中的入口地址。
b. 包含虚函数的类的每个对象都有一个指向虚函数表的 虚指针。