单个成员结构的对齐和大小保证

时间:2017-02-03 12:28:44

标签: c++ struct alignment sizeof

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

struct Foo {
    Bar value;

    Foo() { /* do something */ }
};

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

1 个答案:

答案 0 :(得分:2)

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

你可以保证

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

  2. sizeof(Foo)不小于sizeof(Bar)(否则指针运算会突然崩溃)。