练习题答案
在上一篇文章中,我们留下了一道课后练习题。
题目是:你需要预测下列代码编译后得到的汇编代码进行分析。
这是我们的C++代码:
编译器会对上述代码进行编译,并生成类似如下的汇编代码:
如果使用图片来表示,则如下;
只是为了好玩而已,在这里,我交换了Base1和Base2的顺序。标准中没有关于为基类分配存储的顺序的要求,因此,如果编译器认为这样做会更有效,则完全有权利将Base2放在首位。
指向类Derived的成员函数的指针希望this指针位于q处。因此,当我们有一个p时,除了原始函数指针想要进行的其他任何调整之外,我们还需要向其添加sizeof(Base3)以将其转换为q。
这就是为什么我们将sizeof(Base3)添加到现有调节器中以制作新的组合调节器的原因。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Answer to exercise: Pointer to member function cast》
领取专属 10元无门槛券
私享最新 技术干货