次のクラスが与えられ、他のデータ メンバーはありません。
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 を書き込むと、後でその場所が与えられた場合に、その直後の場所を見つけることができます。エレガントな解決策が見つかったら、ここで更新します。