Ich möchte wissen was [=]
macht? Hier ist ein kurzes Beispiel
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);
Wie würde der Code funktionieren []
anstatt [=]
?
Ich nehme das an
std::function<T (T)>
bedeutet ein Funktionsprototyp, der (T)
als Argument und Rückgabetyp erhält T
?
Antworten:
Das, auf das
[=]
Sie sich beziehen, ist Teil der Erfassungsliste für den Lambda-Ausdruck. Dies teilt C ++ mit, dass der Code im Lambda-Ausdruck initialisiert wird, sodass das Lambda eine Kopie aller lokalen Variablen erhält, die es beim Erstellen verwendet. Dies ist notwendig , dass der Lambda - Ausdruck beziehen zu könnenfactor
undoffset
, die lokalen Variablen innerhalb der Funktion sind.Wenn Sie die ersetzen
[=]
mit[]
, werden Sie einen Compiler - Fehler erhalten , weil der Code innerhalb der Lambda - Ausdruck nicht wissen , was die Variablenoffset
undfactor
beziehen sich auf. Viele Compiler geben in diesem Fall gute Diagnosefehlermeldungen aus. Probieren Sie es aus und sehen Sie, was passiert!quelle
[&]
,[=offset, =input]
etc.Es ist eine Lambda- Erfassungsliste. Stellt Variablen für das Lambda zur Verfügung. Sie können verwenden,
[=]
welche Kopien nach Wert oder[&]
welche als Referenz übergeben werden.quelle
[]
was nichts erfasst. :)