Что выведет код Middle Шаблоны и концепты обновлено
Что выведет: sizeof..., fold и статический член шаблона
Вопрос
Что выведет программа (C++20, g++ 14)? Каждый вывод с новой строки, как в консоли.
#include <cstddef>
#include <iostream>
template <class... Ts>
constexpr std::size_t count() { return sizeof...(Ts); }
template <class... Ts>
auto sum(Ts... xs) { return (xs + ... + 0); }
template <class T>
struct Box { static inline int n = 0; };
int main() {
std::cout << count<int, double, char>() << '\n';
std::cout << sum(1, 2, 3) << ' ' << sum() << '\n';
Box<int>::n++;
Box<int>::n++;
Box<double>::n++;
std::cout << Box<int>::n << Box<double>::n << '\n';
}
Попробуйте сами
Напишите, что выведет код: каждый вывод с новой строки.
Показать ответ и разбор
Коротко
Код выведет: 3, 6 0, 21. sizeof... считает типы в пачке: 3.
Что выведет
3
6 0
21
Разбор
sizeof... считает типы в пачке: 3. Свёртка с начальным значением 0 даёт 6, а для пустой пачки 0. Box<int> и Box<double> разные классы, у каждого своя статическая переменная: 2 и 1, печатаются подряд.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
Что выведет: шаблон против обычной функции
Следующий вопрос
Частичная специализация функции
Ещё по теме «Шаблоны и концепты»
- Дерево отрезков с операцией как параметром шаблона
- Обобщённая функция статистики для чисел и строк
- Один бинарный поиск на все случаи: предикат как параметр шаблона
- Зачем концепты
- Концепты против SFINAE
- Вывод аргументов шаблона класса
- Вывод T при передаче по значению
- Член зависимой базы