Возможно, вы знакомы со схемой 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)
Есть ли причина использовать первую версию? На мой взгляд, вторая более короткая версия более разборчива.
Может быть, оставшиеся привычки программистов на Си, которые думают, что истинные значения следует преобразовать в 1
? (Хотя даже в этом случае более длинная версия имеет больше смысла в присваивании или return
выражении, чем в тесте условного выражения.)