基本上这是对这个问题的跟进 ..
当我查看标准文档时,我发现了这个..
在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)
我的问题是我无法理解它是如何进行优化的,以及为什么基类允许零大小?
Pét*_*rök 10
如果基类为空,则永远不需要拥有基类对象或其任何成员的地址(独立于派生类对象的地址),因此优化其大小是合法的.
这样可以节省(至少)一个字节的内存(可能更多是由于内存对齐规则),如果您在内存受限的平台上的应用程序中有数百万个此类对象,这可以节省大量成本.