18143453325 在线咨询 在线咨询
18143453325 在线咨询
所在位置: 首页 > 营销资讯 > 营销百科 > 虚拟函数内联函数

虚拟函数内联函数

时间:2023-03-26 13:08:01 | 来源:营销百科

时间:2023-03-26 13:08:01 来源:营销百科

虚拟函数内联函数:因为内联函数常常可以提高代码执行的速度,因此很多普通函数会根据情况进行内联化,但是虚拟函数无法利用内联化的优势,这是因为内联函数是在'编译期'编译器将调用内联函数的地方用内联函数体的代码代替(内联展开),但是虚拟函数本质上是'运行期'行为,本质上在'编译期'编译器无法知道某处的虚拟函数调用在真正执行的时候会调用到那个具体的实现(即在'编译期'无法确定其绑定),因此在'编译期'编译器不会对通过指针或者引用调用的虚拟函数进行内联化。也就是说,如果想利用虚拟函数的'动态绑定'带来的设计优势,那么必须放弃'内联函数'带来的速度优势。

根据上面的分析,似乎在采用虚拟函数时带来和很多的负面影响,但是这些负面影响是否一定是虚拟函数所必须带来的?或者说,如果不采用虚拟函数,是否一定能避免这些缺陷?

还是分析以上图形继承体系的例子,假设不采用虚拟函数,但同时还要实现与上面一样的功能(维持程序的设计语义不变),那么对于基类Shape必须增加一个类型标识成员变量用来在运行时识别到底是哪一个具体的派生类对象:

如①处和②处所示,增加type用来标识派生类对象的具体类型。另外注意这时③处和④处此时已经不再使用virtual声明。

其各派生类在构造时,必须设置具体类型,以Circle派生类为例:

对图形继承体系的使用者(这里是Canvas)而言,其Paint和RotateSelected也需要修改:

关键词:函数,虚拟

74
73
25
news

版权所有© 亿企邦 1997-2025 保留一切法律许可权利。

为了最佳展示效果,本站不支持IE9及以下版本的浏览器,建议您使用谷歌Chrome浏览器。 点击下载Chrome浏览器
关闭