返回信息流在32位机器上运行:
程序一:
#include <iostream>
using namespace std;
class A
{
public:
A(){};
~A(){};
};
int main()
{
A a;
cout<<sizeof(a)<<endl;
}
输出结果:1
程序二:
#include <iostream>
using namespace std;
class A
{
public:
A(){};
virtual ~A(){};
};
int main()
{
A a;
cout<<sizeof(a)<<endl;
}
输出结果:4
这是一条镜像帖。来源:北邮人论坛 / cpp / #86714同步于 2015/4/18
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
这两段程序输出的结果如何解释?
lzj0218
2015/4/18镜像同步4 回复
订阅后,新回复会通过你的通知中心匿名送达。
4 条回复
第一个:class A是一个空得class,编译器为了保证两个不同的类的地址不同,会在对象中添加一个多余的字节,所以size是1.
第二个:class A有一个虚函数,所以编译器会为其生成一个虚函数表,那个指向虚函数表的指针就是4个字节,所以现在class不是空得了,所以size就是4.
【 在 libenchao 的大作中提到: 】
: 第一个:class A是一个空得class,编译器为了保证两个不同的类的地址不同,会在对象中添加一个多余的字节,所以size是1.
: 第二个:class A有一个虚函数,所以编译器会为其生成一个虚函数表,那个指向虚函数表的指针就是4个字节,所以现在class不是空得了,所以size就是4.
编译器为了保证两个不同的类的地址不同
似乎应该是:编译器为了保证两个不同类对象的地址不同
嗯,是的,两个对象。
【 在 msmvp 的大作中提到: 】
:
: 编译器为了保证两个不同的类的地址不同
: 似乎应该是:编译器为了保证两个不同类对象的地址不同