Пример сбоя TYPE_ALIGNMENT () - PullRequest
0 голосов
/ 29 марта 2010

У меня есть вопрос, касающийся выравнивания в C / C ++. В Определение выравнивания структур C / C ++ по отношению к его элементам Майкл Берр опубликовал этот макрос:

#define TYPE_ALIGNMENT( t ) offsetof( struct { char x; t test; }, test )

В комментариях кто-то написал, что это может не работать с не POD-типами. Может кто-нибудь дать мне пример кода, где это не удается?

1 Ответ

3 голосов
/ 29 марта 2010

offsetof указывается только для работы с типами POD. Если класс содержит какие-либо элементы данных, которые не являются POD, сам класс не является POD. Таким образом, если t в вашем примере не относится к типу POD, он не гарантированно будет работать.

Из стандарта C ++ (18.1 / 5):

Макрос offsetof принимает ограниченный набор type аргументов в этом международном стандарте. type должен быть структурой POD или объединением POD.

Таким образом, если вы используете offsetof для не POD-типа, результаты не определены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...