单杆件结构的对齐和尺寸保证

Alignment and size guarantees for single member structs

本文关键字:结构 对齐 单杆件      更新时间:2023-10-16

给定一个(可能-非 POD)struct,只有一个成员,没有继承,也没有虚拟方法:

struct Foo {
    Bar value;
    Foo() { /* do something */ }
};

C++是否保证Foo具有与Bar相同的对齐和sizeof?如果没有,那么可以给出什么保证?当我Bar修复为特定类型(POD,基本类型,...)时,是否可以提供一些保证?

没有这样的保证。特别是,编译器可能会在value成员的末尾填充。它们不必具有相同的对齐要求。

您可以保证

  1. 第一个成员value的地址与结构的地址相同。

  2. sizeof(Foo)不小于sizeof(Bar)(否则指针算术会严重中断)。