Hardfold
Что такое fold expressions и какие бывают?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
Fold expressions (C++17) — свёртка parameter pack через бинарный оператор, заменили рекурсию шаблонов.
template<class... Args>
auto sum(Args... args) { return (args + ...); } // unary right
template<class... Args>
auto sum_init(Args... args) { return (0 + ... + args); } // binary left
// Вызвать f для каждого
(f(args), ...);- Unary right
(pack op ...)→p1 op (p2 op (...)); - Unary left
(... op pack)→((p1 op p2) op ...) op pN; - Binary
(init op ... op pack)/(pack op ... op init)— с начальным значением для пустого pack; - Работает с любым оператором:
+,*,&&,||,,,<<,==,&,|.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.