Easyc++20initialization

Что такое designated initializers (C++20)?

1Постановка

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

2Решение

Designated initializers (C++20) позволяют инициализировать поля структуры по имени. Пришли из C99, но с ограничениями в C++.

struct Point { int x, y; };
Point p{.x = 1, .y = 2};       // видно, какое поле чему

struct Config {
    int retries;
    std::chrono::seconds timeout;
    bool verbose;
};
Config c{.retries = 3, .timeout = 30s, .verbose = true};

Ограничения в C++ (в отличие от C):

  • Порядок должен совпадать с порядком объявления полей;
  • Нельзя пропускать поля;
  • Нельзя вкладывать.

Удобно для читаемости, особенно при большом количестве полей или одинаковых типах. Доступно для агрегатов (без пользовательских конструкторов).

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

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

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