c++ - 简单类中的虚方法真的是虚的吗?

标签 c++ inheritance virtual-functions

我有一个简单的类,它没有派生类型,也没有与其他类的继承关系。

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/

相关文章:

c++ - 异常程序终止时的访问冲突 (C++)

c++ - Cygwin 下 std::thread 的意外结果

Java:为什么反序列化不调用构造函数以及最好的解决方法是什么?

C++ 多态性 + 用于选择返回类型的模板成员函数。怎么做?

c++ - 为什么我们在赋值运算符重载中使用引用返回而不是在加减运算中?

c++ - 在 C++ Win32 中获取计算机上的用户配置文件列表

java - Field#getAnnotations() 和 Field#getDeclaredAnnotations() 之间的区别

java - 如何从 if-else 语句创建/实例化对象?

c++ - c++多重继承的理解

c++ - 子类对象作为虚函数的参数