我对派生类中的位域有疑问。
使用 g++ 编译器,您可以分配__attribute__((packed))
给一个类,它会打包位域。所以
class A
{
public:
int one:10;
int two:10;
int three:10;
} __attribute__ ((__packed__));
只占用 4 个字节。到现在为止还挺好。
但是,如果你继承一个类,像这样
class B
{
public:
int one:10;
int two:10;
} __attribute__ ((__packed__));
class C : public B
{
public:
int three:10;
} __attribute__ ((__packed__));
我希望与上面的 A 类具有相同内容的 C 类也具有相同的布局,即占用 4 个字节。但是,C 结果占用了 5 个字节。
所以我的问题是,我做错了什么,如果是,怎么办?或者这是编译器的问题?一个疏忽,一个真正的错误?
我尝试了谷歌搜索,但除了 Linux 和 Windows 之间的差异(编译器试图模拟 MSVC)之外,我没有真正想出任何东西,我对此不感兴趣。这只是在 Linux 上。