Короткий ответ - нет.Для более длинного ответа, пожалуйста, читайте дальше.
Как уже отмечали другие, шаблоны не имеют прямого штрафа во время выполнения - т.е. все их приемы происходят во время компиляции.Однако косвенным образом они могут замедлить ситуацию при нескольких обстоятельствах.В частности, каждый экземпляр шаблона (обычно) создает код, который является отдельным и уникальным от других экземпляров.При нескольких обстоятельствах это может привести к медленному выполнению, просто создав достаточное количество объектного кода, чтобы он больше не помещался в кэш-память.
Редактировать: чтобы прояснить ситуацию с кодомsize: да, большинство компиляторов могут и будут складывать код для идентичных экземпляров - , но , как правило, это тот случай, когда реализации действительно идентичны.Компилятор не вставит код для выполнения даже самых простых преобразований, чтобы использовать его в соответствии с существующей реализацией.Например, обычный вызов функции может / преобразует T *
в T const *
, поэтому вызовы, использующие либо аргументы const
, либо не const
, будут использовать один и тот же код (если вы не решили перегрузить функцию в const
ness, в этом случае вы, вероятно, сделали это специально для обеспечения различного поведения для двух случаев).С шаблоном этого не произойдет - создание экземпляров для T *
и T const *
приведет к созданию двух совершенно отдельных частей кода. возможно компилятор (или компоновщик) может объединить их после факта, но не совсем точно (например, я определенно использовал компиляторы, которые этого не сделали).
Шаблоны оказывают положительное влияние на скорость гораздо чаще, чем отрицательные.