C++类大小与static详解:面试必备知识点

需积分: 10 4 下载量 52 浏览量 更新于2024-09-13 收藏 52KB DOC 举报
"C++面试题及答案,包含类大小计算、虚函数和static的作用" 在C++面试中,理解类的大小计算是至关重要的。一个类的大小并不是简单地等于其所有数据成员的大小之和,而是受到很多因素的影响。以下是关于C++类大小计算的详细知识点: 1. **空类的大小**:即使一个类没有任何数据成员,它也会占用至少1个字节的空间。这是为了在内存中给该类对象分配一个唯一的地址。 2. **数据成员**:当类中包含数据成员时,其大小等于所有数据成员的大小之和。例如,如果一个类只有一个int类型的成员,那么类的大小将是4个字节(假设int是4字节)。需要注意的是,这不包括前面提到的1个字节,因为在实际计算中,这部分会被忽略。 3. **普通成员函数**:普通成员函数并不占用类的实例空间,它们是类的代码的一部分,而不是每个对象的一部分。 4. **虚函数**:如果类含有虚函数,就会在每个对象中添加一个虚函数表指针(vptr),通常占4个字节。这个指针指向包含虚函数地址的虚函数表,使得多态调用成为可能。 5. **数据对齐**:编译器会对数据进行对齐,以提高访问效率。比如,如果一个类包含一个虚函数和一个char类型的数据,由于默认4字节对齐,类的大小可能是8字节,即使char本身只需要1字节。 接下来,我们转向`static`关键字的作用: 1. **控制存储方式**:当`static`修饰内部链接的局部变量时,变量不会在每次函数调用时创建和销毁,而是保持其状态直到程序结束。这样可以实现跨函数调用的持久化变量,而不会影响其作用域。 2. **控制可见性与连接类型**:当`static`用于类的成员变量时,该变量成为类的静态成员,这意味着每个类只有一份这样的变量,而不是每个对象都有一份。静态成员变量不随对象创建和销毁,而是作为类的一部分在程序开始时初始化,并在程序结束时销毁。 3. **外部链接**:在全局或文件作用域,`static`关键字会使变量具有内部链接,意味着该变量只能在当前编译单元中访问,不会被其他编译单元看到,从而限制了其可见性,避免了命名冲突。 理解和掌握C++中类的大小计算以及`static`关键字的使用是C++程序员必备的技能,这些知识点在面试中常常被问及,也是编写高效且内存管理得当的C++代码的关键。