没有数据的类的对象是否会占用内存?

use*_*020 1 c++

可能重复:
C++:空类对象的大小是多少?

我有一个没有数据的类,如下所示

class A {};
Run Code Online (Sandbox Code Playgroud)

我用它来定义一个对象

A a;
Run Code Online (Sandbox Code Playgroud)

我认为对象"a"有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?

如果对象"a"的类型为void,会发生什么.非常感谢!

Mat*_*lia 5

我认为对象"a"有一个地址,对吗?它会占用一些记忆吗?如果是这样,它占用了多少字节?

IIRC标准要求每个对象都有一个地址,并且对象的最小大小(由返回的sizeof)是1.也就是说,优化器可能会使该变量消失(可能除非您明确要求其地址).

除非它是位字段(9.6),否则最派生的对象应具有非零大小并且应占用一个或多个存储字节.基类子对象可以具有零大小.[...]

除非对象是零字段或零大小的基类子对象,否则该对象的地址是它占用的第一个字节的地址.两个不同的对象既不是位字段也不是零大小的基类子对象应具有不同的地址.4

注4:在"as-if"规则下,如果程序无法观察到差异,则允许实现在同一机器地址存储两个对象,或者根本不存储对象(1.9).

(C++11§1.85-6)


如果对象"a"的类型为void,会发生什么.

void 不能用于声明变量,因为它是一个"不完整的类型".

void类型具有一组空值.该void类型是一个不完整的类型无法完成.

(C++11§3.9.19)