簡體   English   中英

C ++子結構位域大小

[英]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 Subclass A具有相同的布局並具有相同的存儲要求。 (在C的情況下,它是struct Sub vs. struct A ,但同樣的想法成立,因為這些都是POD類型。)

確切的行為應該是ABI依賴的。 不過,通過重復使用上面的class A ,我認為你可以讓自己對ABI問題有更多的免疫力。 (稍微不是不透水的。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM