lambda builder mit static lifetime?
-
Habe folgenden lambda builder
static auto gen_cosine (size_t period_len){ return [period_len, n{0}] () mutable { return cos(double(n++) * 2.0 * M_PI / period_len); }; }
wenn ich jetzt die funtion wiederholt aufrufe, erhöht sich n.
auto gen = gen_cosine(2); std::cout << gen() << std::endl; // 1 std::cout << gen() << std::endl; // -1
Hat n persistent state oder wie habe ich das zu lesen?
-
@sewing sagte in lambda builder mit static lifetime?:
Hat n persistent state
persistant? Was soll das bedeuten?
Was hast du erwartet?
-
naja ok, wenn ich die Analogie dieses lambdas mit einem entsprechenenden Object betrachte, in dem period_len und n dann member variablen wären, macht es schon Sinn.
Das static erschließt sich mir nur nicht so ganz
-
@sewing sagte in lambda builder mit static lifetime?:
Das static erschließt sich mir nur nicht so ganz
Worauf bezieht sich das static?
-
auf die function, die das lambda returned. Also kann gen_cosine in mehreren translation units definiert sein
-
@sewing sagte in lambda builder mit static lifetime?:
auf die function, die das lambda returned.
Was ist dann die Frage?
Also kann gen_cosine in mehreren translation units definiert sein
Kommt drauf an, wo genau die Zeilen stehen. In einer Klassendefinition?
Als freie Funktion in einer cpp wäre ein anonymer Namespace die bevorzugte Wahl.
-
als free function in einem source file
ja das hatte ich bereits in Josuttis Buch gelesen, dass man hier lieber anonyme namespaces verwenden solle
gibt es damit dann überhaupt noch eine daseinsberechtigung für free standalone static functions?
-
@sewing sagte in lambda builder mit static lifetime?:
gibt es damit dann überhaupt noch eine daseinsberechtigung für free standalone static functions?
In neuem Code: Nein.