- sizeof(空类型)=?
answer:1
解释:对于空类型或者空类型的实例化,不包含任何信息,但是声明该类型的实例时,必须在内存中有空间,否则无法使用这些实例。占用多少由编译器决定,VS中占用1个字节 - 在空类型中添加一个构造函数和析构函数,sizeof()=?
answer:1
解释:调用构造函数和析构函数只需要知道函数的地址即可,而这些函数的地址只与类型相关,而与类型的实力无关,编译器也不会因为这两个函数而在实例中添加任何的额外信息。
note:公用的成员函数在单独的一段内存空间,所有的类实例共享,类似于静态成员变量;一个对象所占的空间大小只取决于该对象中数据成员所占的空间,而与成员函数(包括内联函数,但是虚函数例外)无关。详见:成员函数的存储方式 - 如果把析构函数标记为虚函数呢?
answer:4或者8
解释:C++的编译器一旦发现一个类型中有虚函数,就会为该类型生成虚函数表,并在该类型的每一个实例中添加一个指向虚函数表的指针。
指针在32位机器上一个指针占用四个字节,64位机器上8个字节。
int在32和64位均为4个字节,机器位数和编译器共同决定 - 类中含有静态成员变量呢?
answer:也不占类实例大小,类似于普通的成员函数。
多个类实例共用一个静态成员,是一种特殊的全局变量,只能被类使用。 - 继承含有虚函数的类?
单一继承:派生类中大小都为4(32位机器)(只考虑虚函数, 无其他成员),虚函数地址都存在于虚函数指针指向的虚函数表中。
多重继承:派生类会出现多个虚指针,此时大小就要具体计算了,如果继承两个含有虚函数的基类,派生类中存在两个虚指针,其大小为8(32位机器)。 - 虚继承含有虚函数的类?
class Derive:virtual public Base{}
父类中存在虚函数,派生类进行虚继承,此时在派生类中出现两个虚指针,一个是指向类中虚函数表的指针,另一个是指向父类的指针,两个是不同的指针,所以类的大小应该是二者相加,即8(32位机器).
面试:sizeof关键字
最新推荐文章于 2024-06-22 05:00:00 发布