任何具有虚函数的类都会获得一个额外的隐藏指针,指向最派生的类。
这个vptr的类型是什么?
答案 0 :(得分:11)
它没有类型。这是标准未指定的实施细节; 它不是语言的一部分。
请注意,C ++并没有说必须存在虚拟表或虚拟“指针”(尽管这是C ++工具链中最常见的RTTI实现)。
另外,你的分析是错误的。例如,在GCC中,通常每个对象都会获得一个指向该对象类型的相关虚拟表的vptr:对象有指针,类型有表。
答案 1 :(得分:2)
该标准不保证存在虚拟表指针,即使大多数实现都使用它。
因此,它没有类型。它只是一个指针数组。
答案 2 :(得分:1)
它具有编译器相关类型,只要编译器理解它就可以是任何类型。由于语言没有提及任何关于vptr
的内容,因此程序员都不会在代码中使用它,编译器可以自由地创建任何任意类型来实现运行时多态性。那个类型不一定要符合C ++语言。