Say У меня есть битовый вроде этого:Портативный способ назначить максимальное значение в битовое поле
struct SomeStruct {
uint32_t first : 12;
uint32_t second : 2;
uint32_t third : 18;
};
SomeStruct obj;
Я хочу, чтобы назначить
obj.second = 3; // Actually, the maximum allowed value
Что такое портативный способ для достижения этой цели? Я также не хочу явно использовать известную ширину битового поля, потому что это потребует операции с дробовиком, если ширина поля изменится в будущем.
Мой код используется
obj.second = std::numeric_limits<uint32_t>::max()
но лязг с -Wbitfield-constant-conversion
выдает предупреждение об этом и cpp reference states:
Следующие свойства битовых полей определяется реализацией Значение , которая является результатом присвоения или инициализации битное поле с значением вне диапазона или путем увеличения битового поля за пределы его диапазона.
Значит, назначает -1
или numeric_limits<uint32_t>::max()
действительно переносным или есть ли другой способ?
связанный/обман: http://stackoverflow.com/questions/3319717/is-there-a-bit-equivalent-of-sizeof-in-c и http://stackoverflow.com/questions/539251/getting -the-size-of-an-indiviual-field-from-ac-struct-field – NathanOliver
@NathanOliver, так вы подразумеваете, что ответ на мой вопрос «это невозможно?». – unkulunkulu
Ну, если вы хотите получить размер в битах, чтобы вычислить max, тогда да. Это зависит от того, что вы хотите сделать. Вот почему я пошел со связанными в первую очередь. – NathanOliver