我有一个简单的类,它没有派生类型,也没有与其他类的继承关系。
class A
{
virtual void f() {}
}
我想知道“虚拟”方法实际上是否不是真正的虚拟,所以该类与
class A
{
void f() {}
}
最佳答案
你知道没有派生类型。编译器不知道这一点。此类类型(如果曾经定义过)将在定义 A
之后定义。
因此,在使用 A
的地方,f()
必须被视为虚拟的,除非编译器可以证明否则,例如,在静态类型的 A
对象上调用 f()
时,例如:
A a;
a.f();
在此上下文中,编译器可以静态调用 A::f()
,因为它知道它不可能调用任何其他内容。
但是当通过 A&
引用或 A*
指针调用 f()
时,编译器将不得不使用虚拟分派(dispatch),因为编译器无法确切知道在运行时使用的是什么类型的对象。
关于c++ - 简单类中的虚方法真的是虚的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68842280/