给定(可能是非POD)struct
只有一个成员,没有继承,没有虚拟方法:
struct Foo {
Bar value;
Foo() { /* do something */ }
};
C ++是否保证Foo
与sizeof
具有相同的对齐和Bar
?如果没有,那么可以给出什么保证?当我将Bar
修改为特定类型(POD,基本类型,......)时,可以给出一些保证吗?
答案 0 :(得分:2)
没有这样的保证。特别是,编译器可能会填充value
成员的末尾。它们不必具有相同的对齐要求。
你可以保证
第一个成员value
的地址与结构地址相同。
sizeof(Foo)
不小于sizeof(Bar)
(否则指针运算会突然崩溃)。