В C я видел некоторое использование offsetof для вычисления смещения элемента в структуре до его начала?
Это все еще рекомендуется использовать в C ++? Любой другой способ сделать это без этого макроса?
C ++ имеет указатели на членов. Они похожи на смещения, но (1) безопасны для типов и (2) более универсальны — они также работают с методами, с базовыми классами и т. Д.
Offsetof — это функция, которая есть только в стандарте C ++ для совместимости с C, поэтому не рекомендуется быть использованным в слове C
Я не рекомендовал бы это ни для чего, если вам действительно не нужно. Пока ваше использование допустимо в C, оно должно быть допустимым для C ++. Не зная, что вы делаете, на ваш вопрос невозможно ответить.
Нет, это не так.
правильный C++
Стиль побуждает пользователя избегать всех деталей низкого уровня, когда это возможно. Это как для безопасности / правильности и удобочитаемости. Только тогда, когда низкоуровневые манипуляции гарантируют реальное и значительное улучшение производительности, можно прыгнуть в нее.
Один из способов использования offsetof()
был в C-подобном коде, имеющем структуры с фиксированным заголовком и массивами переменного размера, как описано в этом сообщении в блоге:
Почему некоторые структуры заканчиваются массивом размера 1?
(Обратите внимание, что в этом блоге используется FIELD_OFFSET
макрос, который является Windows-измом, соответствующим offsetof()
.)
Я думаю, что в современном C ++ мы должны использовать высший уровень методы и код, как std::vector
для массивов переменного размера.