Я хочу знать, что [=]
делает? Вот небольшой пример
template <typename T>
std::function<T (T)> makeConverter(T factor, T offset) {
return [=] (T input) -> T { return (offset + input) * factor; };
}
auto milesToKm = makeConverter(1.60936, 0.0);
Как будет работать код []
вместо [=]
?
Я предполагаю что
std::function<T (T)>
означает прототип функции, которая становится (T)
аргументом и типом возвращаемого значения T
?
Ответы:
[=]
Вы имеете в виду является частью списка захвата для лямбда - выражения. Это сообщает C ++, что код внутри лямбда-выражения инициализируется, так что лямбда-функция получает копию всех локальных переменных, которые она использует при создании. Это необходимо для того, чтобы лямбда-выражение могло ссылаться наfactor
иoffset
, которые являются локальными переменными внутри функции.Если вы замените
[=]
с[]
, вы получите ошибку компиляции , потому что код внутри лямбда - выражения не будут знать , что переменныеoffset
иfactor
ссылаться. Многие компиляторы выдают хорошие диагностические сообщения об ошибках, если вы это делаете, поэтому попробуйте и посмотрите, что произойдет!источник
[&]
,[=offset, =input]
и т.д.Это список захвата лямбда . Делает переменные доступными для лямбды. Вы можете использовать,
[=]
какие копии копируются по значению или[&]
какие передаются по ссылке.источник
[]
который ничего не захватывает. :)