可能重复:
C++:空类的对象的大小是多少?
我有一个没有数据的类,如下所示
class A {};
我用它来定义一个对象
A a;
我认为对象“a”有一个地址,对吧?它会占用一些内存吗?如果是这样,它占用多少字节?
如果对象“a”的类型为 void,会发生什么情况。非常感谢!
可能重复:
C++:空类的对象的大小是多少?
我有一个没有数据的类,如下所示
class A {};
我用它来定义一个对象
A a;
我认为对象“a”有一个地址,对吧?它会占用一些内存吗?如果是这样,它占用多少字节?
如果对象“a”的类型为 void,会发生什么情况。非常感谢!
我认为对象“a”有一个地址,对吧?它会占用一些内存吗?如果是这样,它占用多少字节?
IIRC 标准要求每个对象都有一个地址,并且对象的最小大小(由 返回sizeof
)为 1。话虽如此,优化器可能会使该变量消失(也许除非您明确要求其地址)。
除非它是位域 (9.6),否则最派生对象应具有非零大小并应占用一个或多个字节的存储空间。基类子对象的大小可能为零。[...]
除非对象是位域或大小为零的基类子对象,否则该对象的地址就是它占用的第一个字节的地址。既不是位字段也不是零大小的基类子对象的两个不同对象应具有不同的地址。4
注意 4:在“as-if”规则下,如果程序无法观察到差异(1.9),则允许实现将两个对象存储在同一机器地址或根本不存储对象。
(C++11 §1.8 ¶5-6)
如果对象“a”的类型为 void,会发生什么情况。
void
不能用于声明变量,因为它是“不完整类型”。
该
void
类型有一组空值。该void
类型是无法完成的不完整类型。
(C++11 §3.9.1 ¶9)
从理论上讲,它根本不需要占用任何内存。它可以一起优化。
但是,如果这就是您的意思,则不能sizeof
是 a 类。0
如果你 print out sizeof(a)
,你(大多数时候)会得到1
(不管它是什么,它都是一个非零值)。
另外,你不能有 type 的对象void
,所以最后一个问题没有意义。