【发布时间】:2017-11-10 14:09:09
【问题描述】:
为什么是这个代码:
#include <iostream>
struct S {
unsigned char a:6, b:6, c:6, d:6;
};
int main(int argc, char *argv[]) {
std::cout << sizeof(S);
return 0;
}
返回 4?它的大小不应该是 4 x 6 = 24b = 3B 吗?相比之下,这段代码:
struct S { unsigned char a:4, b:4, c:4, d:4; };
返回一个 2,而这个:
struct S { unsigned char a:4, b:4, c:4, d:4, e:4, f:4; };
返回一个 3...
【问题讨论】:
-
@YSC 好吧,我不知道如何表达这个问题。我去那边看看。谢谢。
-
位字段不保证成员的大小与您提供的位数完全相同。类型的大小也不会被限制为其成员的总和。
-
@YSC 所以,答案是 - 这取决于编译器?
-
@FrançoisAndrieux 因此,即使编译器计算其他 2 个没有填充,它也会添加第一个填充?
-
@underscore_d 您应该投票关闭该重复项,因此如果此问题关闭,它将包含在重复项中。