C++ 具有4个6位成员的结构的大小
为什么这个代码是:C++ 具有4个6位成员的结构的大小,c++,struct,bit,sizeof,C++,Struct,Bit,Sizeof,为什么这个代码是: #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; } struct S { unsigned char a:4, b:4, c:4, d:4; }; 返回一个2,而这个: struct S { u
#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;
}
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…:
位字段的以下属性由实现定义:
[...]
关于类对象中位字段的实际分配细节的所有信息
例如,在某些平台上,位字段不跨字节,在其他平台上则跨字节
是的,它是由实现定义的,也就是说,由编译器决定
因此,即使编译器计算其他2个不带填充的值,它也会添加填充第一个值
是的,因为在第一种情况下,如果没有填充值,值将跨越字节边界,而在另外两个示例中,值不会跨越字节边界
同样,这是实现定义的,可以在另一个平台、同一平台上的不同编译器、甚至同一编译器的不同版本上进行不同的处理。@YSC好吧,我不知道如何表达这个问题。我去那边看看。谢谢。位字段不能保证成员的大小与您提供的位数完全一致。类型的大小也不能限制为其成员的总和。@YSC所以,答案是-这取决于编译器?@FrançoisAndrieux所以,即使编译器计算其他2个而不填充,它也会添加填充第一个?@下划线\d您应该投票以该重复项结束,因此,如果这个问题结束,它将包含在副本中。这正是我在那里读到的内容,但在测试时发现类似的例子给出了不同的结果,这让我感到困惑。谢谢