C++ vptr的数据类型是什么?

C++ vptr的数据类型是什么?,c++,C++,任何具有虚函数的类都将获得一个额外的隐藏指针,该指针将指向派生最多的类 此vptr的类型是什么?它没有类型。这是标准未规定的实施细节;它不是语言的一部分 注意,C++并没有说必须有一个虚拟表或一个虚拟的指针(尽管这是C++工具链中最常用的RTTI实现)。 而且,你的分析是错误的。例如,在GCC中,通常每个对象都会获得一个vptr,该vptr指向该对象类型的相关虚拟表:对象有指针,类型有表。该标准不保证虚拟表指针的存在,即使大多数实现都使用它 因此,它没有类型。它只是一个指针数组。它具有依赖于编译

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


此vptr的类型是什么?

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

<>注意,C++并没有说必须有一个虚拟表或一个虚拟的指针(尽管这是C++工具链中最常用的RTTI实现)。
而且,你的分析是错误的。例如,在GCC中,通常每个对象都会获得一个vptr,该vptr指向该对象类型的相关虚拟表:对象有指针,类型有表。

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


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

它具有依赖于编译器的类型,只要编译器理解它,它就可以是任何类型。由于该语言没有提到任何关于
vptr
,程序员也没有在代码中使用它,编译器可以自由创建任意类型来实现运行时多态性。这种类型不一定与C++语言一致。

AWW,你的答案是没有乐趣的:(Blindy:至少它不是完全误导。嗨,根据我的理解,VTAT是在课堂级别上形成的。在GCC中,通常每个对象都会获得一个vptr,该vptr指向该对象类型的相关虚拟表:对象有指针,类型有表“如果每个对象都获得了自己的VPTR,并且指向同一个VTHT,那么需要创建不同的VPTR指针。我们可以创建一个静态类级别的VPTR。@ SAMBAV:不,您不能,因为访问您的对象并不总是通过其静态类型来执行。请考虑<代码> A*PTR=新B.();PTR->PoT())。<代码> > >调用<代码> b::Foo的唯一方法是,类型<代码> b/COD>包含一个隐藏的指向VTABLE的指针,用于“代码> B/CODE >,而不是针对代码< V> > <代码>。这称为多态性。它也不是指针数组。它没有C++构造的表示。