【发布时间】:2014-10-18 01:48:32
【问题描述】:
struct Flat {
int a1;
int a2;
}
// a hierarchical struct which containing a struct attribute
struct NonFlat {
Flat b1;
int b2;
}
Flat f1, f2;
memcmp (&f1, &f2, sizeof f1)
在我的编译器中,它可以工作,意思是
f1.a1 == f2.a1, f1.a2 == f2.a2 memcmp (f1, f2) == 0;
NonFlat n1, n2;
memcmp (&n1, &n2, sizeof n1) // does it also work for non-flat structs, considering the padding?
我认为它也应该适用于 NonFlat 结构。但是,在我的编译器中,对于非平面结构,似乎即使成员属性相等, memcmp 的结果表明它们是不同的。
【问题讨论】:
-
“它有效”并不意味着你认为它的意思。
-
你的结构对我来说似乎很平坦。
-
使用合成时,结构是“扁平的”。使用聚合时不是。您的
Flat和NonFlat结构都在使用组合,因此是“扁平的”。 -
OTOH,你似乎没有正确调用
memcmp。 -
伙计们,要么你是对的,我的编译器是错的,要么是相反
标签: c++ c struct padding memcmp