Характеристики битовых полей в C++
Читая https://en.cppreference.com/w/cpp/language/bit_field, верны ли следующие выводы?
- независимо от того, не имеют ли соседние битовые поля отступы между ними, определяется реализацией (это читается иначе в https://eel.is/c++draft/class.bit#:bit-field)
- размещение битового поля в объекте класса определяется реализацией
- положение битов внутри битового поля определяется реализацией (хотя С++20 определяет целое число со знаком как дополнение до 2-х).
(для C см.: Характеристики битовых полей в C )
1 ответ
«В вопросе есть три очень четких пункта относительно одной конкретной функции в одном языке. Поэтому было бы полезно получить один ответ, включающий все три пункта вопроса».
Адресация точек одна за другой
- Идея о том, что соседние битовые поля не имеют заполнения между ними, не может быть гарантирована в текущих реализациях C++.
- Да, размещение битового поля в объекте класса C++ определяется реализацией.
-
«... в стандарте нет гарантии, что битовые поля отображаются в соседние области памяти, хотя в большинстве разумных реализаций это будет сделано ...»
со ссылкой на...
Короче говоря, вывод состоит в том, что не существует никаких гарантий того, что реализация битового поля между различными новыми спецификациями C++ будет согласованной. Поэтому переносимость с одной реализации C++ на другую затруднена, если не невозможна, что вынуждает обращаться к спецификациям и другой документации, поддерживающей используемый компилятор C++, для любого приложения, использующего его, чтобы быть уверенным в его реализации (правилах) относительно того, как заполнение, или реализованы другие атрибуты битовых полей.