C++枚举按位存储属性
为了节省存储空间,让每个FeatureSupports的枚举值占据一个特定的比特位置,并使用时通过“或”运算压缩地存储在
Compiler的spp成员中,使用时可以通过检测spp的某位来判断枚举。
有时候枚举值非常多,而且在项目开发中还会不断的增加,那么代码编写者必须想办法对这些枚举的值进行校验,比如查验
一下是否有重位等。使用最大枚举“SMAX”,与所有的枚举或运算值来验证是否有枚举重位。
enum FeatureSupports {
C99 = 0x0001,
ExtInt = 0x0002,
SAssert = 0x0004,
NoExcept = 0x0008,
SMAX = 0x0010,
};
struct Compiler {
const char * name;
int spp;
};
int main()
{
assert((SMAX - 1) == (C99 | ExtInt | SAssert | NoExcept));
Compiler a = { "abc", (C99 | SAssert) };
if (a.spp & C99)
{
}
}
转载请注明:少狼 – 敬畏知识的顽皮狗 » C++枚举按位存储属性
还没有人抢沙发呢~