Hardoffsetof

Что такое offsetof и когда использовать?

1Постановка

Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.

2Решение

`offsetof(Type, member)` — смещение члена в структуре в байтах. С C++17 — constexpr для standard-layout типов.

#include <cstddef>
struct Point { int x, y; };
static_assert(offsetof(Point, y) == 4);

// Применение: generic-доступ к полям по смещению
void setField(void* obj, size_t off, int val) {
    *reinterpret_cast<int*>((char*)obj + off) = val;
}
Point p;
setField(&p, offsetof(Point, y), 42);   // p.y = 42

Ограничение: только для standard-layout типов. Использование на non-standard-layout (с virtual) — UB.

3Как отвечать

  • Сначала уточните условия и ограничения, покажите аналитическое мышление.
  • Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
  • Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡

На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.