Mediumvariadic
Чем variadic функции (vararg) отличаются от variadic templates?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
C-style vararg (...) — переменное число аргументов без проверки типов, доступ через va_list. Variadic templates — любое число аргументов любого типа, проверка типов, безопасны.
// C-style vararg — небезопасно, нужно знать сколько и каких аргументов
int sum(int count, ...) {
va_list args; va_start(args, count);
int total = 0;
for (int i = 0; i < count; ++i) total += va_arg(args, int);
va_end(args); return total;
}
// Variadic templates — типобезопасно
template<class... Args>
auto sum(Args... args) { return (args + ...); } // C++17 fold- vararg не работает с C++ типами вроде
std::string; - variadic templates применяются в
make_unique,std::thread,std::tuple,emplace; - C-style vararg остался для совместимости с
printf/scanf, в новом коде его избегают.
С C++20 есть std::format — безопасный типизированный printf.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.