在C ++中对非POD类型使用sizeof
运算符是否安全?这个值会大于或等于其所有成员的大小吗?
答案 0 :(得分:6)
当然这很安全。另请注意,sizeof
在编译时进行评估。
{P}类型的sizeof
永远不会少,而不是所有成员的总大小,除了任何空的基类优化。
由于包装安排以及没有成员的班级将具有非零sizeof
的事实,它可能更大比其所有成员的总数更多
答案 1 :(得分:2)
是。 Sizeof保证返回足够的字节来保存对象,包括任何填充和其他类型的“隐藏”字段,例如用于序列化它的填充。
也许唯一需要注意的是,在编译时进行评估,它不是polimorphic。 也就是说,
class Base
{
int x;
};
class Derived : public Base
{
int y;
};
int main()
{
Base* k = new Derived;
return sizeof(*k)/sizeof(int);
}
返回1
而不是2
,即它在正式类型Base
上进行求值,即使该对象在运行时实际上是Derived
。
答案 2 :(得分:2)