【发布时间】:2009-11-07 16:29:52
【问题描述】:
在 C++ 中使用枚举来存储位标志有点麻烦,因为一旦枚举值被 ORed,它们就会失去它们的枚举类型,这会在没有显式转换的情况下导致错误。
this question 的公认答案建议重载 | 运算符:
FlagsSet operator|(FlagsSet a, FlagsSet b)
{
return FlagsSet(int(a) | int(b));
}
我想知道这个方法是否有任何运行时影响?
【问题讨论】:
-
+1 因为我还不知道这种技术。
-
将
int切换到unsigned- 否则您要求其他代码以符号扩展问题告终(位标志永远不会签名!那将是非常愚蠢的)。
标签: c++ enums type-systems bitflags