Является ли bool безопасным в определении битового поля?

Возможный дубликат:
C ++ битовая упаковка с bools

Гарантируется ли безопасное использование C ++? bool Ключевое слово внутри определения битового поля?

Что-то вроде:

struct flags {
bool a : 1;
bool b : 1;
}

5

Решение

Да. На практике вы можете использовать sizeof(bool) * CHAR_BIT как ваше руководство, чтобы узнать, сколько бит доступно.

Из C ++ 98, § 9.6.3

Битовое поле должно иметь целочисленный тип или тип перечисления (3.9.1).

Из C ++ 98, § 3.9.1.7

Типы bool, char, wchar_t, а также целочисленные типы со знаком и без знака вместе называются целочисленными.
типы

5

Другие решения

Из C ++ 03 9.6 «Битовые поля»:

Битовое поле должно иметь целочисленный тип или тип перечисления (3.9.1). это
определяется реализацией ли простой (ни явно подписано, ни
unsigned) char, short, int или long битовое поле подписано или не подписано.
Значение bool может быть успешно сохранено в битовом поле любого ненулевого значения
размер. …

Если значение true или false хранится в битовом поле типа bool
любой размер (включая одноразрядное битовое поле), исходное значение bool и
значение битового поля должно сравниваться равным. …

3.9.1 / 7 «Основные типы» указывает, что bool является интегральным типом.

6