好的,这更像是一个澄清C ++功能如何工作的请求而不是答案。我将首先解释我遇到的问题,因为直接的答案是它不是一个非常好的课堂设计。
我有一个课程正在形成一个不可维护的if语句;当我试图将它变成一个复合体时,我开始对使用深层拷贝工作比使用原始blob更困惑,以及一般的小对象分配问题。所以我开始寻找一种方法将blob拆分成几个类,编译器可以将它们转换回原始的blob。
在下面的代码中,我知道super::get_x()
和foo_b
中的foo_c
是可以接受的 - 来自其他堆栈溢出问题 - 但我不确定{{1}在super::get_z()
中是。最后foo_c
,f.get_x()
和f.get_y()
的来电是虚拟函数调用,因为它不是明确的,并且它不知道是否{{ 1}}是否具有子类,或者它们是否可以因为它实际上不具有?
f.get_z()
答案 0 :(得分:0)
查看C++ FAQ:
因此,内联虚拟调用唯一可以内联的是编译器知道作为虚函数调用目标的对象的“确切类”。只有当编译器具有实际对象而不是指针或对象的引用时,才会发生这种情况。即,使用本地对象,全局/静态对象或复合内部的完全包含的对象。