c++ - 虚函数是在编译期间确定的吗?

标签 c++ virtual

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

有人可以解释一下吗?

最佳答案

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

关于c++ - 虚函数是在编译期间确定的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3646715/

相关文章:

c++ - 部分匹配 std::map 中的长键

c++ - 如何根据条件和参数数量启用结构体?

c# - 如何创建虚拟音频设备

C++ 继承和虚函数

C++ [] 具有多个参数的数组运算符?

c++ - 将数字 append 到 int 而不转换为字符串?

c++ - 从 GMock 获得失败的期望

c++ - 覆盖非虚拟方法?

.net - 这个虚方法调用如何比密封方法调用更快?

c++ - 有没有办法不继承子类中函数的 "virtualness"?