Здравствуёте, у меня достаточно конкретный вопрос: Стоит ли пренебрегать переменными bool типа опционной переменной из, например, 8 бит:
class SapperFieldCellAccesser
{
// bool
bool flagged;
bool opend;
// bit
typedef char Options;
Options options;
public:
A() : flagged(false), opend(false), options(0) {}
bool BitIsFlagged() { return options & 1; }
bool BitIsOpend() { return options & 2; }
// vs
bool BoolIsFlagged() { return flagged; }
bool BoolIsOpend() { return opend; }
};
Во-первых, единая переменная с битовыми флагами позволяет легко и эффективно реализовать работу с несколькими флагами одновременно, в том числе с набором флагов, который формируется во время выполнения - через битовые маски. Для набора разрозненных полей типа bool естественным образом это реализовать не получится.
Во-вторых, набор полей типа bool займет больше памяти, чем "упакованная" переменная с битовыми флагами. Имеет ли это для вас значение - зависит от вашей задачи, т.е. от того, насколько массово инстанциируется данный класс.
В-третьих, не упомянут третий вариант: набор bit-fields размера 1 типа bool. Такой вариант обладает всеми преимуществами из "во-вторых", но в то же время всеми недостатками из "во-первых".
P.S. Если вы собрались работать с битовыми флагами, то тип для хранения таких флагов надо выбирать беззнаковый. Не char, а unsigned char. Или uint8_t. Или еще что-то в этом роде.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости