Выбор ответа Junior Шаблоны и концепты спрашивают часто обновлено
Почему шаблоны в заголовках
Вопрос
Почему определения шаблонов обычно пишут в заголовочных файлах?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Код генерируется при инстанцировании, нужно видеть определение. Инстанцирование происходит там, где шаблон используется с конкретными типами.
Варианты ответа
- Так требует стандарт для любых функций, объявленных как
inline - Иначе шаблонный код получится медленнее из-за косвенных вызовов
- Линковщик не умеет работать с шаблонами из
.cpp-файлов в принципе - Код генерируется при инстанцировании, нужно видеть определениеправильный ответ
Разбор
Инстанцирование происходит там, где шаблон используется с конкретными типами. Если определение лежит в другом .cpp, компилятор вставит вызов, а сгенерировать тело не сможет: будет «undefined reference» при линковке. Альтернатива: явное инстанцирование нужных типов в одном .cpp.
- Обычные функции как раз определяют в
.cpp. - На скорость готового кода это не влияет.
- Линковщик работает с инстанцированиями нормально, если они где-то созданы.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.
Предыдущий вопрос
if constexpr в шаблоне
Следующий вопрос
Возможность шаблонов и стандарт, где она появилась
Ещё по теме «Шаблоны и концепты»
- Дерево отрезков с операцией как параметром шаблона
- Обобщённая функция статистики для чисел и строк
- Один бинарный поиск на все случаи: предикат как параметр шаблона
- Зачем концепты
- Концепты против SFINAE
- Вывод аргументов шаблона класса
- Вывод T при передаче по значению
- Член зависимой базы