Выбор ответа Junior Шаблоны и концепты спрашивают часто обновлено

Почему шаблоны в заголовках

Вопрос

Почему определения шаблонов обычно пишут в заголовочных файлах?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Код генерируется при инстанцировании, нужно видеть определение. Инстанцирование происходит там, где шаблон используется с конкретными типами.

Варианты ответа

  1. Так требует стандарт для любых функций, объявленных как inline
  2. Иначе шаблонный код получится медленнее из-за косвенных вызовов
  3. Линковщик не умеет работать с шаблонами из .cpp-файлов в принципе
  4. Код генерируется при инстанцировании, нужно видеть определениеправильный ответ

Разбор

Инстанцирование происходит там, где шаблон используется с конкретными типами. Если определение лежит в другом .cpp, компилятор вставит вызов, а сгенерировать тело не сможет: будет «undefined reference» при линковке. Альтернатива: явное инстанцирование нужных типов в одном .cpp.

  • Обычные функции как раз определяют в .cpp.
  • На скорость готового кода это не влияет.
  • Линковщик работает с инстанцированиями нормально, если они где-то созданы.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.