什么时候对象可以有非零大小,一个或多个存储字节?

New*_*ent 6 c++ language-lawyer

C++ 14 intro.cpp状态:

a most derived object shall have a non-zero size and shall occupy one or more bytes of storage
Run Code Online (Sandbox Code Playgroud)

他们为什么要说

非零尺寸

一个或多个存储字节

什么时候可以有一个而不是另一个?

Som*_*ude 4

这两个部分实际上说的是不同的事情。

最派生的对象应具有非零大小

这意味着sizeof使用对象将返回非零大小。

最派生的对象...应占用一个或多个字节的存储空间

这意味着该对象占用了一些字节(一个或多个)内存。

如果第二条语句不存在,则可能意味着将sizeof报告非零大小,但该对象实际上可能不会使用任何内存。

如果没有第一个语句,则可能意味着sizeof可以返回零,但该对象仍会占用内存空间。

两者都是必需的并且彼此正交。

  • 如果 sizeof 不返回存储所需的字节数,那么它有什么用呢? (3认同)
  • @MikeMB - 想想“空基优化”。子对象“真正”没有占用任何存储空间。这就是为什么强调“最衍生”。 (3认同)