Что означает [=] в 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?

Ответ 1

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

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

Ответ 2

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