You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++标准是否规定直接成员与继承成员结构体的sizeof相等?

C++标准对两种结构体sizeof是否相等的规定

先看你给出的两个结构体定义:

第一种结构体:

struct AB
{
    int a;
    int b;
};

第二种继承结构:

struct A
{
    int a;
};
    
struct B : public A
{
    int b;
};

关于sizeof(AB) == sizeof(B)是否成立,C++标准没有强制要求两者必须相等,但在绝大多数常见的编译器实现中,这个等式是成立的。

具体细节:

  • struct AB的大小是两个int的大小加上必要的对齐填充。由于int的对齐要求通常等于自身大小,所以sizeof(AB)一般就是2 * sizeof(int)。
  • struct B继承自A,A包含一个int,B额外添加一个int。C++标准允许编译器为了对齐或其他实现需求在派生类中插入填充字节,但在常规场景下,编译器不会在基类子对象和派生类成员之间添加额外填充,因此sizeof(B)也会等于2 * sizeof(int),此时两者相等。

需要注意的例外情况:

  • 标准并未禁止编译器插入额外填充,虽然这种情况在int成员的常规场景下几乎不会出现。比如某些特殊平台或自定义对齐规则下,可能导致sizeof(B)大于sizeof(AB)。
  • 这里的基类A不是空类,所以空基类优化(EBO)不适用——如果基类是空类,标准允许编译器优化掉基类的占位字节,但这个场景不涉及。

总结:主流编译器默认实现中两者大小相等,但标准没有强制保证,理论上存在不相等的可能(非常罕见)。

内容的提问来源于stack exchange,提问作者Boris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 08:14:55