Hardstandard-layoutpod

Что такое стандартные layout-ы: standard_layout, POD?

1Постановка

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

2Решение

`standard_layout` — layout совпадает с C-struct: все non-static члены одного access level, нет virtual, нет баз с данными. `trivial` — тривиальные специальные функции. POD (устарело) = standard_layout + trivial.

// standard_layout + trivially copyable — дружит с C и memcpy
struct Point { int x, y; };
static_assert(std::is_standard_layout_v<Point>);
static_assert(std::is_trivial_v<Point>);
static_assert(std::is_trivially_copyable_v<Point>);

// НЕ standard_layout: разные access levels
class Mixed {
public:  int a;
private: int b;
};
static_assert(!std::is_standard_layout_v<Mixed>);

// НЕ trivial: есть нетривиальный конструктор
struct WithCtor { int x; WithCtor() : x(42) {} };
static_assert(!std::is_trivial_v<WithCtor>);

Для бинарной совместимости (сеть, файлы, C-FFI) важны standard_layout + trivially_copyable.

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

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

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