bool vs bit * 8

189
07 июля 2018, 14:00

Здравствуёте, у меня достаточно конкретный вопрос: Стоит ли пренебрегать переменными 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; }
};
Answer 1

Во-первых, единая переменная с битовыми флагами позволяет легко и эффективно реализовать работу с несколькими флагами одновременно, в том числе с набором флагов, который формируется во время выполнения - через битовые маски. Для набора разрозненных полей типа bool естественным образом это реализовать не получится.

Во-вторых, набор полей типа bool займет больше памяти, чем "упакованная" переменная с битовыми флагами. Имеет ли это для вас значение - зависит от вашей задачи, т.е. от того, насколько массово инстанциируется данный класс.

В-третьих, не упомянут третий вариант: набор bit-fields размера 1 типа bool. Такой вариант обладает всеми преимуществами из "во-вторых", но в то же время всеми недостатками из "во-первых".

P.S. Если вы собрались работать с битовыми флагами, то тип для хранения таких флагов надо выбирать беззнаковый. Не char, а unsigned char. Или uint8_t. Или еще что-то в этом роде.

READ ALSO
Нужно объяснить маленькую часть кода

Нужно объяснить маленькую часть кода

Есть спрайтовая анимация

186
Каждый h3 тэг с новым размером шрифта

Каждый h3 тэг с новым размером шрифта

Пожалуйста не предлагайте классы или idНужно сделать так, чтобы каждый новый тэг h3 появлялся с новым размером шрифта

164
Есть видео уроки по созданию расширения для devtools?

Есть видео уроки по созданию расширения для devtools?

Есть видео уроки по созданию расширения для devtools?

188
Сборка ng build --prod после команды ng eject

Сборка ng build --prod после команды ng eject

На Angular5 проекте с помощью ng eject был сгенерирован файл webpackconfig

119