Chcę wiedzieć, co [=]
robi? Oto krótki przykład
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);
Jak kod działałby z []
zamiast [=]
?
zakładam, że
std::function<T (T)>
oznacza prototyp funkcji, który otrzymuje (T)
jako argument i zwraca typ T
?
Odpowiedzi:
To, do
[=]
którego się odnosisz, jest częścią listy przechwytywania wyrażenia lambda. To mówi C ++, że kod wewnątrz wyrażenia lambda jest inicjowany, tak aby lambda otrzymała kopię wszystkich zmiennych lokalnych, których używa podczas tworzenia. Jest to konieczne, aby wyrażenie lambda mogło odwoływać się dofactor
ioffset
, które są zmiennymi lokalnymi wewnątrz funkcji.Jeśli zastąpi
[=]
się[]
, dostaniesz błąd kompilatora, ponieważ kod wewnątrz wyrażenia lambda nie będzie wiedział, co zmienneoffset
ifactor
dotyczą. Wiele kompilatorów wyświetla dobre diagnostyczne komunikaty o błędach, jeśli to zrobisz, więc spróbuj i zobacz, co się stanie!źródło
[&]
,[=offset, =input]
itp.To lista przechwytywania lambda . Udostępnia zmienne dla lambda. Możesz użyć,
[=]
które kopie według wartości lub[&]
które są przekazywane przez odwołanie.źródło
[]
który niczego nie przechwytuje. :)