============== Beispiellösung [TOC] ============== Zur ersten Variante =================== :import: session06/step03/select-increasing2.cpp ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o select-increasing2 select-increasing2.cpp ./select-increasing2 ---------------------------------------------------------- Zur zweiten Variante ==================== Die zweite Variante scheitert zunächst daran, dass der Funktions-Operator implizit mit `const` deklariert wird. D.h. unser Lambda-Ausdruck entspricht folgendem Konstrukt: ---- CODE (type=cpp) ------------------------------------------------------- class Anonymous { int counter = 1; void operator()(int& value) const { value = counter++; } }; ---------------------------------------------------------------------------- Das liefert einen ähnlichen Fehler: :import: session06/step03/init-numbers3.cpp [fold] ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o init-numbers3 init-numbers3.cpp ---------------------------------------------------------- Unter diesen Umständen darf _counter_ nicht verändert werden. Das mag vielleicht etwas überraschend sein, unterstreicht aber den Bezug zu funktionalen Programmiersprachen, bei denen so etwas auch nicht zulässig wäre. Es gibt die Möglichkeit, dies mit der Angabe des Schlüsselworts `mutable` zu umgehen. Dann ist es eine bewusste Entscheidung und das Schlüsselwort macht darauf aufmerksam, dass der Lambda-Ausdruck einen Status besitzt, den es selbst verändert: :import: session06/step03/init-numbers4.cpp ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o init-numbers4 init-numbers4.cpp ./init-numbers4 ---------------------------------------------------------- Auf die gleiche Weise kann natürlich auch das andere Problem umgesetzt werden: ---- SHELL (path=session06/step03,hostname=theon) -------- g++ -Wall -o select-increasing3 select-increasing3.cpp ./select-increasing3 ---------------------------------------------------------- :navigate: up -> doc:index back -> doc:session06/page05 next -> doc:session06/page07