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 78

2 ответа:

The [=] вы имеете в виду часть список захвата для лямбда-выражения. Это говорит C++, что код внутри лямбда-выражения инициализируется так, что лямбда получает копию всех локальных переменных, которые он использует при создании. Это необходимо для того, чтобы лямбда-выражение могло ссылаться на factor и offset, которые являются локальными переменными внутри функции.

если заменить [=] с [], вы получите ошибку компилятора потому что код внутри лямбда-выражения не будет знать, что переменные offset и factor см. Многие компиляторы дают хорошие диагностические сообщения об ошибках, если вы это сделаете, поэтому попробуйте и посмотрите, что произойдет!

Это лямда - список захвата. Делает переменные доступными для лямбда. Вы можете использовать [=] копирование по значению, или [&], который проходит по ссылке.