【发布时间】:2011-01-10 16:53:29
【问题描述】:
您可能熟悉enum 位掩码方案,例如:
enum Flags {
FLAG1 = 0x1,
FLAG2 = 0x2,
FLAG3 = 0x4,
FLAG4 = 0x8,
NO_FLAGS = 0,
ALL_FLAGS = FLAG1 | FLAG2 | FLAG3 | FLAG4
};
f(FLAG2 | FLAG4);
我见过很多代码,然后测试掩码中的某个位,例如
if ((mask & FLAG3) == FLAG3)
但这不就相当于这个吗?
if (mask & FLAG3)
使用第一个版本有什么理由吗?在我看来,第二个较短的版本更清晰。
也许是 C 程序员遗留下来的习惯,他们认为应该将真值转换为 1? (尽管即使在那里,较长的版本在赋值或return 语句中比在条件语句测试中更有意义。)
【问题讨论】:
-
现在用掩码和 ALL_FLAGS 来做。不再一样了。
-
==的优先级高于&,因此您的条件中需要括号:if ((mask & FLAG3) == FLAG3)。