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