【发布时间】:2025-12-22 13:40:17
【问题描述】:
假设在一个派生类对象上调用了一个虚函数(通常在对象上或通过指针/引用),它覆盖了该函数,但它的派生类都没有覆盖它。它是通过 v 指针“虚拟地”调用还是作为普通函数调用,所以所有优化/内联都适用于它?标准对此有何规定?
class CBase{
public:
virtual void doSomething() = 0;
};
class CDerived1 : public CBase{
public:
void doSomething() override { /* do stuff */};
};
class CDerived2 : public CDerived1{
};
//...
CDerived1 derived1;
CDerived1* p_derived1 = &derived1;
p_derived1->doSomething();
【问题讨论】:
-
请用一些示例代码说明。也许这样您所考虑的案例的差异就会变得明显。
-
虚拟是虚拟的,内联需要编译器非常聪明/积极并且了解整个程序。你使用派生两次?你的意思是衍生自衍生?该标准以“虚拟函数支持动态绑定和面向对象编程”的虚拟函数开头。这是编译运行后发生的情况。
-
@Yunnosch 编辑完成
标签: c++