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

C++20中仅含单一基础类型成员的标准布局类,其大小是否被标准保证与成员类型大小相等?

C++20中仅含单一基础类型成员的标准布局类,其大小是否被标准保证与成员类型大小相等?

好问题!咱们来拆解C++20标准里的相关规则,给你一个确定的答案。

首先先确认你的前提:class A{ int v; }; 确实是标准布局类(std::is_standard_layout_v<A>为true),而且&a == &a.v的行为是标准明确保证的——这是标准布局类的核心特性:第一个非静态数据成员的地址和类对象的地址完全重合。

回到你最关心的点:sizeof(A) == sizeof(int)是被C++20标准严格保证的,具体依据和原因如下:

  • 你的类A是非空类,仅包含一个非静态、非位域的基础类型成员,既没有虚函数、虚基类,也没有继承任何基类,是标准布局类的最简合法形式。
  • 根据C++20标准中[class.mem]和[basic.types.general]的相关条款:对于这类仅含单个非静态非位域成员的非空标准布局类,类的大小恰好等于该成员的大小。因为此时类不需要额外的填充字节——既没有其他成员需要对齐的需求,也没有虚表指针、基类填充等额外开销,标准明确要求类的大小只需容纳这唯一的成员即可。

  • 你观察到GCC和Clang中这个等式成立,这不是编译器的特殊实现,而是它们严格遵循了标准要求,任何符合C++20标准的编译器都必须保证这一点。

这里需要提一个小例外:如果类继承了空基类(比如struct B {}; struct A : B { int v; };),此时sizeof(A)可能会大于sizeof(int)(空基类可能被分配1字节的填充),但你的例子里A没有基类,所以完全不用考虑这种情况。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:23:01