sizeof()是递归的吗?

时间:2012-06-05 11:24:06

标签: c++ struct sizeof

答案应该很简单,但我想确定。

sizeof()递归吗?例如,

struct foo
{
   DWORD a;
   DWORD b;
};

struct bar
{
   DWORD c;
   foo d;
};

sizeof(bar)是否包含foo的大小,返回一个完整的12个字节(假设DWORD是4个字节)?

3 个答案:

答案 0 :(得分:6)

是的, sizeof 运算符会为您提供结构的大小,包括其所有成员。

但请注意,编译器可能会添加自己的填充,因此实际大小可能/可能不会等于结构成员的大小总和。

答案 1 :(得分:5)

是...... sizeof总共提供了直接包含在该类型中的所有成员,包括struct / class数据成员,非虚拟基类,一些实现定义链接/计数器跟踪虚拟基础,虚拟分派表指针,填充有助于对齐数据成员以实现CPU安全或高效访问,理论上任何其他实现可能会感觉像放在那里! (例如,用于运行时调试/错误检测,非标准的垃圾收集支持......)

当然,它不包括指向或引用对象的大小,但包括这些指针和引用的大小。

答案 2 :(得分:3)

是的,确实如此。摘自ISO / IEC 9899:TC3:

  

当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾部填充。

(强调我的)