C++ - что делает [ = ]?
Я хочу знать, что [=]
делает? Вот короткий пример
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
?
2 ответа:
The
[=]
вы имеете в виду часть список захвата для лямбда-выражения. Это говорит C++, что код внутри лямбда-выражения инициализируется так, что лямбда получает копию всех локальных переменных, которые он использует при создании. Это необходимо для того, чтобы лямбда-выражение могло ссылаться наfactor
иoffset
, которые являются локальными переменными внутри функции.если заменить
[=]
с[]
, вы получите ошибку компилятора потому что код внутри лямбда-выражения не будет знать, что переменныеoffset
иfactor
см. Многие компиляторы дают хорошие диагностические сообщения об ошибках, если вы это сделаете, поэтому попробуйте и посмотрите, что произойдет!
Это лямда - список захвата. Делает переменные доступными для лямбда. Вы можете использовать
[=]
копирование по значению, или[&]
, который проходит по ссылке.