Каковы плюсы и минусы использования битов-битов над флагами enum?
namespace Flag {
enum State {
Read = 1 << 0,
Write = 1 << 1,
Binary = 1 << 2,
};
}
namespace Plain {
enum State {
Read,
Write,
Binary,
Count
};
}
int main()
{
{
unsigned int state = Flag::Read | Flag::Binary;
std::cout << state << std::endl;
state |= Flag::Write;
state &= ~(Flag::Read | Flag::Binary);
std::cout << state << std::endl;
} {
std::bitset<Plain::Count> state;
state.set(Plain::Read);
state.set(Plain::Binary);
std::cout << state.to_ulong() << std::endl;
state.flip();
std::cout << state.to_ulong() << std::endl;
}
return 0;
}
Как я вижу до сих пор, биты имеют более удобные функции set/clear/flip для обработки, но использование флажков-переходов является более широко распространенным подходом.
Каковы возможные недостатки битов и что и когда я должен использовать в своем ежедневном коде?