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 подскажет развёрнутый ответ в реальном времени.