【发布时间】:2015-01-15 21:25:20
【问题描述】:
我有一堆属性塞在一个位域中以节省空间:
struct Flags {
uint access : 2;
uint status : 2;
uint isEnabled : 1;
uint isDeletable: 1;
...
};
然后我有一个静态的Flags defaultFlags,它在程序启动时被初始化。我的主要问题是在对象构造函数中 flags = defaultFlags; 是否安全,以便消除单独分配每个字段的 20 行?
另外,我想知道序列化呢?根据编译器的说法,Flags 是 4 个字节,我可以将其序列化为 32 位无符号整数并对其进行反灭菌而不会造成任何数据损坏吗?
【问题讨论】:
-
位域的顺序未指定,所以对于序列化,您可能会遇到问题。
-
如果您真的需要节省空间,您是否考虑过使用位掩码?
-
所以如果我想要它便携,我应该废弃位域并使用手动位打包来代替?
-
位掩码工作,让您完全控制订购和包装。您在这里得到的是对编译器的礼貌请求,可能会被忽略。
-
这很奇怪,IIRC
struct成员不会被重新排序,但是当结构成员是位域时不是这种情况?
标签: c++ serialization variable-assignment bit-fields mass-assignment