为什么基类的大小为零?

lia*_*iaK 8 c++

基本上这是对这个问题跟进 ..

当我查看标准文档时,我发现了这个..

9.3类中,

类类型的完整对象和成员子对象应具有非零大小.96) ......

是的,是的..但是,

96)基类子对象不受约束.

所以,当我查看Stroustrup的FAQ时,有一个例子

void f(X* p)
    {
        void* p1 = p;
        void* p2 = &p->a;
        if (p1 == p2) cout << "nice: good optimizer";
    } 
Run Code Online (Sandbox Code Playgroud)

我的问题是我无法理解它是如何进行优化的,以及为什么基类允许零大小

Arm*_*yan 11

基类的大小不能为零.只有基类子对象才可以.表示派生对象的基础部分.


Pét*_*rök 10

如果基类为空,则永远不需要拥有基类对象或其任何成员的地址(独立于派生类对象的地址),因此优化其大小是合法的.

这样可以节省(至少)一个字节的内存(可能更多是由于内存对齐规则),如果您在内存受限的平台上的应用程序中有数百万个此类对象,这可以节省大量成本.