gpt4 book ai didi

c++ - 枚举可以减少到 C++ 中的位大小吗?

转载 作者:太空狗 更新时间:2023-10-29 20:08:12 26 4
gpt4 key购买 nike

给定以下 - 我可以让 sizeof(A)1 吗?现在我得到 8,但我希望 A 在布局上与 Z 相同 - 因为枚举只有一位的数据。

enum BOOL { x , y};

struct A {
BOOL b : 1;
unsigned char c : 7;
};
struct Z {
unsigned char r : 1;
unsigned char c : 7;
};

int main()
{

A b;
b.b = x;
std::cout << b.b << "," << sizeof(A) << ","<< sizeof(Z) << std::endl;
return 0;
}

最佳答案

这里的问题是 BOOL 将默认使用 int 作为基础类型。由于它使用 int,因此它会将结构填充到具有 8 的大小,因为这将很好地保留结构的 int 部分对齐。

但您可以做的是指定您不需要int,而是想要unsigned char,这样它就可以将两个位域打包在一个成员中.这并不能保证,但它更有可能发生。使用

enum BOOL : unsigned char { x , y};

使 A 在 GCC、Clang 和 MSVC 中的大小为 1

关于c++ - 枚举可以减少到 C++ 中的位大小吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56445572/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com