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