24得票9回答
向上转型和虚函数表如何共同确保正确的动态绑定?

因此,vtable是编译器维护的表,其中包含指向该类中虚函数的函数指针。 并且 将派生类的对象分配给祖先类的对象称为向上转型(up-casting)。 向上转型是使用基类指针或引用处理派生类实例/对象;这些对象不是 "被赋值",这意味着像operator=调用一样的值覆盖。(感谢:Ton...

23得票4回答
虚表 C++

我看到很多人写道:“对于一个声明了虚函数的类,存在一个虚拟表。” 我的问题是,虚拟表只存在于声明有虚函数的类中吗?还是存在于从该类派生出来的类中? 例如:class Base{ public: virtual void print(){cout<<"Ba...

23得票6回答
C++中vtable查找的性能影响

我正在评估将一款实时软件从C/汇编语言重写为C++/汇编语言(原因与问题无关的部分必须以汇编语言完成)。 每秒有3,000次中断,对于每个中断,需要按照顺序执行大约200个不同的操作。处理器运行速度为300 MHz,给我们100,000个周期来完成这项工作。通过一个函数指针数组,在C语言中已...

20得票6回答
C# 和 Java 中的虚函数是如何工作的?

C#和Java中的虚函数是如何工作的?它们是否使用与C ++类似的vtable和vpointer概念,还是完全不同的东西?

20得票5回答
Qt:信号和槽错误:对于`vtable的未定义引用

以下示例取自此链接:http://developer.kde.org/documentation/books/kde-2.0-development/ch03lev1sec3.html#include <QObject> #include <QPushButton> #...

20得票5回答
多重继承中理解vptr?

我正在尝试理解书中关于Effective C++中的一句话。以下是多重继承的继承图。 现在这本书说每个类都需要单独的内存来存储vptr。此外,它还作出了以下声明: 上面的图表中的奇怪之处在于,即使涉及四个类,也只有三个vptrs。实现可以自由生成四个vptrs(如果他们愿意),但是三个足够...

18得票2回答
C++:类特化是否是符合编译器的有效转换?

我希望这个问题不会太过专业,如果是的话,请告诉我是否需要迁移到其他地方... 很久以前,我写了一篇本科论文,提出了各种针对C++和相关语言的去虚拟化技术,通常基于代码路径的预编译特化思想(有点像模板),但在无法在编译时选择正确的特化情况下(如必须使用模板),需要在运行时进行检查来选择正确的特...

17得票2回答
x86汇编语言中,对象是如何工作的?

我试图了解对象在汇编级别是如何工作的。对象如何存储在内存中,成员函数又如何访问它们?

16得票2回答
C++编译器能够优化同一指针上的重复虚函数调用吗?

假设我有以下代码void f(PolymorphicType *p) { for (int i = 0; i < 1000; ++i) { p->virtualMethod(something); } } 编译器生成的代码会对p的vtable...

16得票8回答
为什么vptr不是静态的?

每个包含一个或多个虚函数的类都有与之关联的 Vtable。一个名为 vptr 的 void 指针指向该 vtable。该类的每个对象都包含指向相同 Vtable 的 vptr。那么为什么 vptr 不是静态的?为什么不把它与类相关联,而是将其与对象相关联呢?