C++面试深度解析:static与const成员函数,及sizeof运算符

需积分: 10 4 下载量 143 浏览量 更新于2024-09-19 收藏 264KB PDF 举报
"C++、C_、C面试真题解析" C++是一种强大的面向对象的编程语言,常常在面试中被用来评估候选人的技术能力。本文将深入探讨两个经典的C++面试问题及其解析。 问题一涉及到`static`和`const`关键字在类成员函数中的使用。在C++中,`static`修饰的成员函数属于类,而非类的任何实例,这意味着它们不依赖于`this`指针来访问类的数据。相反,`const`修饰的成员函数表明该函数不会修改类的非静态数据成员。然而,`const`成员函数内部仍然有一个隐含的`const this`指针,确保不会改变对象状态。由于`static`函数没有`this`指针,所以它与`const`的语义冲突,两者不能同时用于一个成员函数。这也就意味着在C++中,我们不能定义一个既`static`又`const`的成员函数。 问题二是一个关于类大小计算的问题。在C++中,`sizeof`运算符用于计算类型的大小,包括其所有成员的大小。在给定的代码中,有三个类:`A`,`B`和`C`。`A`是一个空类,理论上其大小应为0,但由于实现细节,如对齐要求或编译器的预留空间,Visual Studio 2008中每个空类实例占1个字节。`B`类增加了构造函数和析构函数,但这两种函数在对象实例中并不占用额外空间,因为它们的地址在运行时是已知的。所以`sizeof(B)`也是1。`C`类继承自`B`,并且其析构函数被声明为虚拟的。在C++中,拥有虚函数的类会有一个虚函数表指针(vptr),这个指针通常占用4个字节(在32位系统中)。因此,`C`类的大小是`B`类的大小加上这个vptr,即1+4=5字节。但在Visual Studio 2008中,由于对齐规则,即使总大小小于4字节,编译器也会将其填充到4字节的倍数,所以`sizeof(C)`是4。 这两个问题展示了C++中的关键概念,包括`static`和`const`的使用、类大小的计算以及虚函数的作用。理解这些概念对于编写高效且健壮的C++代码至关重要。在面试中,能够清楚地解释这些问题背后的原理和C++标准的规定,可以体现候选人对C++深入的理解和技术功底。