什么是迟后编译?

论坛 期权论坛 期权     
匿名用户1024   2021-5-29 13:01   10652   2
分享到 :
0 人收藏

2 个回复

倒序浏览
2#
有关回应  16级独孤 | 2021-5-29 13:01:23
多态(polymorphism):源于希腊语,意思是“多种形状”。根据不同类型调用不同的函数的能力,允许父类的指针可以指向子类的成员函数,允许对象与适当的成员函数在运行时进行绑定,运行时根据对象的类型选择正确的成员函数。也称迟后编译和滞后编译(late binding)。基类有多少子类,父指针就有多少形态。主要通过虚函数来实现,关键字为virtual。它用来通知编译器,该派生类的成员函数有可能取代基类的同名函数。
3#
有关回应  16级独孤 | 2021-5-29 13:01:24
下载APP提问
百度知道
十分钟内有问必答
立即下载
什么叫做迟后联编?
就是对这句话的注解?
A,对调用的虚函数和模板类都进行迟后编译
展开
我来答
幻の上帝
LV.15 推荐于 2016-12-01
联编指语言实现过程中合并模块、函数等代码单元生成可执行代码调用的处理过程,通常会明确地确定对每个模块、函数调用的存储器地址,把外部对它们的访问绑定正确的地址上。可以把联编分为两种类型,静态联编和动态联编。前者在编译期就确定了函数调用和函数实现之间的联系,一个调用对应具体的函数调用的所有信息;而后者在编译期中并没有完全确定调用的函数信息,在运行期中才根据运行状态判断应该调用哪个函数,怎样传入参数。
迟后联编(或者称为晚绑定)是典型的动态联编。在C++中,这种方式在编译期不确定具体调用的函数(不过编译期静态检查会确定地限制可选的函数的类型),在运行期中根据指针或引用实际所指的对象的类型信息来判断调用哪个函数,以实现类的非静态成员函数的多态性。具体而言,当基类的指针或引用指向派生类的实例时,通过指针或引用调用一个成员函数,若在基类和实际被指向的对象所属的派生类存在同名且类型相同的函数,会调用派生类中的版本。由于指针或引用可能指向属于不同的类的对象,并不能在编译时完全确定,因此必须在运行期中确定,需要使用迟后联编。一般实现隐藏在对象隐含的一个指针——vptr(虚指针)中,vptr指向vtable(虚表),vtable和类(而不是类的实例)直接相关,包含了在编译期确定的可能被选择的函数(即virtual成员函数/虚函数)入口地址/偏移表(典型地,是一个数组)。此外,在虚继承中,可能还会有vbtbl(虚基类表)和vbptr(虚指针),用来储存虚基类信息,在运行期中确定具体应该选择的vtable——这也属于迟后联编。(有些实现会把vbtbl、vbptr和vtable、vptr合并。)
====
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:136515
帖子:27303
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP