vptr的数据类型是什么?

时间:2011-06-23 16:30:23

标签: c++

任何具有虚函数的类都会获得一个额外的隐藏指针,指向最派生的类。

这个vptr的类型是什么?

3 个答案:

答案 0 :(得分:11)

它没有类型。这是标准未指定的实施细节; 它不是语言的一部分

请注意,C ++并没有说必须存在虚拟表或虚拟“指针”(尽管这是C ++工具链中最常见的RTTI实现)。

另外,你的分析是错误的。例如,在GCC中,通常每个对象都会获得一个指向该对象类型的相关虚拟表的vptr:对象有指针,类型有表。

答案 1 :(得分:2)

该标准不保证存在虚拟表指针,即使大多数实现都使用它。

因此,它没有类型。它只是一个指针数组。

答案 2 :(得分:1)

它具有编译器相关类型,只要编译器理解它就可以是任何类型。由于语言没有提及任何关于vptr的内容,因此程序员都不会在代码中使用它,编译器可以自由地创建任何任意类型来实现运行时多态性。那个类型不一定要符合C ++语言。