Hardfold-expressionc++17

Что такое fold expressions (C++17)?

1Постановка

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

2Решение

Fold expressions применяют бинарный оператор ко всему parameter pack. Четыре формы: unary right (pack op ...), unary left (... op pack), binary right (pack op ... op init), binary left (init op ... op pack).

template<typename... Args>
auto sum(Args... a) { return (... + a); }   // unary left fold

template<typename... Args>
void print_all(Args... a) {
    ((std::cout << a << ' '), ...);          // comma fold
}

// Binary fold с начальным значением
template<typename... Args>
auto sum_init(Args... a) { return (0 + ... + a); }

Поддерживаемые операторы: + - * / % ^ & | << >> && || , и др. Для пустого pack: && = true, || = false, , = void.

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

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

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