答案应该很简单,但我想确定。
sizeof()
递归吗?例如,
struct foo
{
DWORD a;
DWORD b;
};
struct bar
{
DWORD c;
foo d;
};
sizeof(bar)
是否包含foo
的大小,返回一个完整的12个字节(假设DWORD是4个字节)?
答案 0 :(得分:6)
是的, sizeof 运算符会为您提供结构的大小,包括其所有成员。
但请注意,编译器可能会添加自己的填充,因此实际大小可能/可能不会等于结构成员的大小总和。
答案 1 :(得分:5)
是...... sizeof
总共提供了直接包含在该类型中的所有成员,包括struct
/ class
数据成员,非虚拟基类,一些实现定义链接/计数器跟踪虚拟基础,虚拟分派表指针,填充有助于对齐数据成员以实现CPU安全或高效访问,理论上任何其他实现可能会感觉像放在那里! (例如,用于运行时调试/错误检测,非标准的垃圾收集支持......)
当然,它不包括指向或引用对象的大小,但包括这些指针和引用的大小。
答案 2 :(得分:3)
是的,确实如此。摘自ISO / IEC 9899:TC3:
当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾部填充。
(强调我的)