(Ich habe bereits gelesen, wie lange implizite Funktoren aus Lambda in C ++ noch leben, und diese Frage wird nicht beantwortet.)
Ich verstehe, dass die C ++ - Lambda-Syntax nur Zucker ist, um eine Instanz einer anonymen Klasse mit einem Aufrufoperator und einem bestimmten Status zu erstellen, und ich verstehe die Lebensdaueranforderungen dieses Status (entschieden, ob Sie nach dem Wert von als Referenz erfassen). Aber was ist die Lebensdauer des Lambda-Objekts selbst? std::function
Wird die zurückgegebene Instanz im folgenden Beispiel nützlich sein?
std::function<int(int)> meta_add(int x) {
auto add = [x](int y) { return x + y; };
return add;
}
Wenn ja, wie funktioniert es ? Das scheint mir ein bisschen zu magisch zu sein - ich kann mir nur vorstellen, dass es funktioniert, wenn std::function
ich meine gesamte Instanz kopiere, was je nach dem, was ich aufgenommen habe, sehr schwer sein kann - in der Vergangenheit habe ich std::function
hauptsächlich mit bloßen Funktionszeigern verwendet und diese kopiert schnell. Es scheint auch angesichts der std::function
Art der Löschung problematisch zu sein .