gpt4 book ai didi

C++专访: vtable for a class with a pure virtual function

转载 作者:IT老高 更新时间:2023-10-28 21:41:41 29 4
gpt4 key购买 nike

我今天被问到这个面试问题!! (这是一个非常尴尬的电话采访..):

What is the difference between the vtable for a class with virtual functions and a class with pure virtual functions?

现在,我知道 C++ 标准没有指定任何关于 vtables 的内容,甚至没有指定 v-table 的存在......但是从理论上讲,答案是什么?

我脱口而出,具有纯虚函数的类可以有一个 vtable,其纯虚函数的 vtable 条目将指向派生类的实现。这个假设正确吗?我没有得到面试官的肯定回答。

假设的编译器会为只有纯虚函数的类创建一个 vtable 吗?如果类包含带有定义的纯虚函数怎么办? (如图:http://www.gotw.ca/gotw/031.htm)。

最佳答案

在非纯虚函数的情况下,vtable 中的每个条目将引用 final-overriderthunk,如果需要,它会适应 this 指针。对于纯虚函数,vtable 中的条目通常包含一个指向泛型函数的指针,该泛型函数通过一些合理的消息提示和中止程序(在此调用的纯虚函数上下文或类似的错误消息)。

Will a hypothetical compiler create a vtable for a class with only pure virtual functions?

是的,会的,不同之处在于存储在表格中的内容,而不是表格的形状。在一种简单的方法中,纯虚函数的 NULL 指针,虚函数的非 NULL 指针。实际上,指向一个泛型函数的指针会提示和 abort() 与通常的编译器。

What if the class contains pure virtual functions with definitions?

这不会影响 vtable。 vtable 仅用于动态调度,并且永远不会将调用动态调度到纯虚函数的定义(即,您只能通过禁用限定类型名称的动态调度来手动调度纯虚函数:x.base::f() 将调用 base::f,即使它是 pure-virtual,但如果是纯虚拟,x.f() 永远不会被分派(dispatch)到 base::f

关于C++专访: vtable for a class with a pure virtual function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7636230/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com