C++中的空类所占多少个字节呢?一直以来都想到有这个问题,但是却忘了去看,今天一个学长说面试面到了,我想应该是4吧。我想到的是内存对齐。
但是试了一下,并不是4而是1.开始我以为是Dev C++的问题,因为那个GCC很老了,后来测试了一下发现 不是编译器的问题。
网上找了找相关资料,说是空类也可以实例化。既然要实例化,那么不同的实例肯定是有区别的。为了便于区分这些实例,编译器会默认给他们分配一个字节的空间,便于区别。
那么,空类的子类呢?不难想象sizeof运算之后也是1.
//Blog: http://www.programlife.net/
#include <iostream>
using namespace std;
class B{};
class C : public B{};
int main()
{
cout << "sizeof(B): " << sizeof(B) << endl;
cout << "sizeof(B): " << sizeof(C) << endl;
return 0;
}
上面的程序运行后输出两个1.
下一个面试题:说明输出结果,并解释。
#include <iostream>
using namespace std;
class A
{
private:
char array[0];
};
class B{};
class C : public B{};
int main()
{
cout << "sizeof(A):" << sizeof(A) << endl;
cout << "sizeof(B):" << sizeof(B) << endl;
cout << "sizeof(C):" << sizeof(C) << endl;
return 0;
}
B和C的sizeof操作返回1在上一篇文章已经说过了。至于sizeof(A)暂时不知道什么原因,输出了0,哪位朋友知道的可以解释一下。
转自:http://www.programlife.net/cpp-sizeof-problems-2.html