О смещении использования в C и C ++?

В C я видел некоторое использование offsetof для вычисления смещения элемента в структуре до его начала?

Это все еще рекомендуется использовать в C ++? Любой другой способ сделать это без этого макроса?

3

Решение

C ++ имеет указатели на членов. Они похожи на смещения, но (1) безопасны для типов и (2) более универсальны — они также работают с методами, с базовыми классами и т. Д.

1

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

Offsetof — это функция, которая есть только в стандарте C ++ для совместимости с C, поэтому не рекомендуется быть использованным в слове C

0

Я не рекомендовал бы это ни для чего, если вам действительно не нужно. Пока ваше использование допустимо в C, оно должно быть допустимым для C ++. Не зная, что вы делаете, на ваш вопрос невозможно ответить.

0

Нет, это не так.

правильный C++ Стиль побуждает пользователя избегать всех деталей низкого уровня, когда это возможно. Это как для безопасности / правильности и удобочитаемости. Только тогда, когда низкоуровневые манипуляции гарантируют реальное и значительное улучшение производительности, можно прыгнуть в нее.

0

Один из способов использования offsetof() был в C-подобном коде, имеющем структуры с фиксированным заголовком и массивами переменного размера, как описано в этом сообщении в блоге:

Почему некоторые структуры заканчиваются массивом размера 1?

(Обратите внимание, что в этом блоге используется FIELD_OFFSET макрос, который является Windows-измом, соответствующим offsetof().)

Я думаю, что в современном C ++ мы должны использовать высший уровень методы и код, как std::vector для массивов переменного размера.

0
По вопросам рекламы [email protected]