[英]C++ Substructure Bitfield Size
考慮以下:
class A { public:
int gate_type : 4;
bool storage_elem : 1;
uint8_t privilege : 2;
bool present : 1;
} __attribute__((packed));
class B { public:
struct Sub {
int gate_type : 4;
bool storage_elem : 1;
uint8_t privilege : 2;
bool present : 1;
} type_attr; //Also tried with "__attribute__((packed))" here in addition to outside
} __attribute__((packed));
編譯器是g ++ 4.8.1。 sizeof(A)== 1,sizeof(B)== 4。 為什么會這樣? 我需要像結構B這樣的東西,大小為1。
這似乎是一個愚蠢的反問題。 當我重寫你的例子時,我得到你想要的結果:
class A { public:
int gate_type : 4;
bool storage_elem : 1;
uint8_t privilege : 2;
bool present : 1;
} __attribute__((packed));
class B { public:
A type_attr; //Also tried with "__attribute__((packed))" here in addition to outside
};
是否有某些原因你不能在class B
class A
重復使用class A
class B
的定義? 這似乎是更好的方法。
我記得,盡管具有相同的字段寬度,順序等,C和C ++都不能保證struct Sub
與class A
具有相同的布局並具有相同的存儲要求。 (在C的情況下,它是struct Sub
vs. struct A
,但同樣的想法成立,因為這些都是POD類型。)
確切的行為應該是ABI依賴的。 不過,通過重復使用上面的class A
,我認為你可以讓自己對ABI問題有更多的免疫力。 (稍微不是不透水的。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.