Что большинство людей означает «шаблон раздувания» - это миф. Шаблон, созданный дважды, создает no больше кода, чем две отдельные функции, которые обрабатывают те же самые типы. Если вы создадите экземпляр шаблона тысячи раз, вы получите много кода, но если вы напишете тысячи функций, вы получите одинаковый код (см. Diet Templates для некоторых подлинных способов небрежно определяющие шаблоны могут привести к некоторым «bloat».) Шаблоны могут влиять на время компиляции, но это не «раздувание».
auto
Ключевое слово не шаблон, он использует те же правила типа дедукции в качестве шаблонов, но если вы пишете auto i = 1;
есть только один «конкретизации» т.е. auto
имеет только вывести один тип, и он производит точно такой же код как int i = 1;
поэтому не может быть раздуваться. Это просто альтернативный синтаксис для объявления переменной. Нулевое раздувание.
Теперь полиморфные лямбды различны, они определяют тип с шаблоном функции члена operator()
, поэтому каждый раз, когда вы звоните закупоривающий operator()
с различными типами аргументов вы создать еще одну специализацию шаблона функции, но это не имеет ничего к делать с auto
, использование auto
- это просто синтаксис для объявления шаблона. Если вы назовете это тысячами раз, вы получите много кода, но не больше, чем если бы вы использовали тысячи различных лямбда-выражений для конкретных типов, которые вы используете (вы почти наверняка получаете меньше кода с общей лямбдой, потому что есть только одно закрытие тип так меньше RTTI и имена типов для компилятора для создания и сохранения в памяти.)
Это не шаблон, это всего лишь вывод типа. –
Использование 'auto' в качестве типа параметра даже не компилируется, не так ли? – Jason
Это когда-нибудь C++ 14 просмотров – Zeks