// (1)
template<typename T>
T add1(T a, T b)
{
return a + b;
}
// (2)
auto add2 = [](auto a, auto b)
{
return a + b;
};
лямбды В этом простом примере я задавался вопрос, реализация лучше с точкой зрения:Различие между шаблоном функции и выражением
- размера коды (в старые времена шаблонов, используемых, чтобы вызвать «разрастание коды»)
- скорость выполнения (есть ли разница для нетривиальной тела функции?)
- встраивание дружественность (который вариант более вероятно, чтобы быть встраиваемыми в случае нетривиальной тела функции?)
предпочитаю поздняя версия. О размере кода вы можете улучшить профиль и проверить себя. –
все зависит от этого, примерно то же самое. –
'(1)' и '(2)' не делают то же самое. 'add1 (1, 3.14)' fail, тогда как 'add2 (1, 3.14)' успешно. '(3)' будет что-то вроде 'template auto add3 (A a, B b) -> decltype (a + b) {return a + b;}'. C++ 14 позволяет вам уйти без '-> decltype()' -part. –
nwp