给定以下类,没有其他数据成员:
typedef uint32_t id_t;
typedef int64_t loc_t;
class foo:
{
public:
enum bar : uint8_t
{
BAR1,
BAR2,
BAR3
};
private:
id_t id;
loc_t start;
loc_t stop;
bar std;
};
谁能解释为什么:
sizeof( id_t ) 返回 4...
sizeof( loc_t ) 返回 8...
sizeof( bar ) 返回 1...4+(2*8)+1 = 21
然而:
sizeof( foo ) 返回 32?
删除 bar 枚举类型的 uint8_t 要求只会成功地使 sizeof( bar ) 返回 4 (int) 而 sizeof( foo ) 在 24 正确字节对齐时仍返回 32。
编辑:为什么已经得到令人满意的回答。我感谢每个发表评论的人,因为每个人都带来了不同的细节。
我需要的修复是能够使用 sizeof() 创建文件位置偏移量。因此,当我将 foo 以二进制格式写入文件时,如果我稍后给出它的位置,我可以立即找到它后面的位置。如果我找到一个优雅的解决方案,我会在这里更新。