C++ 如果vptr是在创建对象时创建的,那么为什么具有虚拟函数的类的大小在32位sys上为4,在64位机器上为8

C++ 如果vptr是在创建对象时创建的,那么为什么具有虚拟函数的类的大小在32位sys上为4,在64位机器上为8,c++,virtual,C++,Virtual,据说vptr是在创建对象时创建的,那么为什么具有虚拟函数的类的大小在32位机器上为4,在64位机器上为8,这意味着对于具有虚拟函数的基类(也在派生类中继承)存在一些隐藏的vptr吗如果是,那么vptr的用途是什么?指针的大小取决于操作系统。在32位机器上是32位(4字节),在64位机器上是8字节。 如果你要一个类的大小,而不是指针的大小,那么编译器可以根据OS类型调整它的倍数32/64。 < P> C++标准没有定义一个 VTAB< /COD>或 VPTR < /Cord>,它更确切地定义了多形

据说vptr是在创建对象时创建的,那么为什么具有虚拟函数的类的大小在32位机器上为4,在64位机器上为8,这意味着对于具有虚拟函数的基类(也在派生类中继承)存在一些隐藏的vptr吗如果是,那么vptr的用途是什么?

指针的大小取决于操作系统。在32位机器上是32位(4字节),在64位机器上是8字节。

如果你要一个类的大小,而不是指针的大小,那么编译器可以根据OS类型调整它的倍数32/64。

< P> C++标准没有定义一个<代码> VTAB< /COD>或 VPTR < /Cord>,它更确切地定义了多形性和动态绑定应该如何表现。尽管
vtable
是polimorphism与动态绑定结合的一种非常常见的实现,但是
vptr
不像指针那样是一种一流的语言构造,您可以像成员一样访问它,或者定义它在引用/取消引用或大小方面作为指针

因此,编译器可以自由使用其他实现,因此您无法使用虚拟成员函数预测对象的大小


然而,在大多数实现中,
vptr
可能与普通指针的内存大小相同,因此
vptr
的大小很可能与该体系结构中普通指针的大小相同,即32位系统上的4个,或64位系统上的8个。

vptr是一个指针。32位和64位系统上的指针大小不同。密切相关:,