Вероятно, вы знакомы с битовой маской 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
, чем в тесте условного оператора).