虚拟函数是在编译期间确定的?

or.*_*ore 5 c++ virtual

我试图查找虚拟函数是在编译期间还是在运行时确定。在查看时,我发现了一些动态链接/后期绑定,但我不明白这是否意味着函数本身在可执行文件之前的编译期间或可执行文件期间确定。

有人可以解释一下吗?

Dar*_*rov 4

对于虚拟函数来说,解析是在运行时完成的。当您拥有对象的实例时,只有在程序运行时才知道要调用哪个方法,因为只有在运行时您才知道该实例的确切类型。对于非虚函数,此解析可以在编译时完成,因为已知只能调用此方法,并且不能有子类覆盖它。这也是为什么虚拟方法调用有点慢(绝对可以忽略不计,但比非虚拟方法调用慢)。本文更详细地解释了这个概念。