静态联编和动态联编
程序调用的函数时,将使用哪个可执行代码块?编译器负责回答这个问题。将源代码中的函数调用解释为执行特定的函数代码块被称为函数名联编。
在C语言中,这非常简单,因为每个函数名都对应不同的函数。但在C++中,由于函数重载的缘故,这项任务更复杂。编译器必须查看函数参数和函数名才能确定使用哪个函数。 然而,C/C++编译器可以在编译过程完成这种联编。
在编译过程中进行联编被称为静态联编(static binding),又称为静态绑定、早期联编。然而,虚函数使这项工作变得更加困难,使用哪一个函数是不能在编译时期确定的,因为编译器不知道用户将选择哪种类型的对象。所以,编译器必须能够在程序运行时选择正确的虚函数的代码,这被称为动态联编(dynamic binding),又称为动态绑定、晚期联编。
下面我们看一下指针和引用类型的兼容性:
-
<