Avatar ·

Was ist ein Lambda-Ausdruck in C++ und wann sollte man ihn verwenden?

Hallo zusammen! Ich lerne C++ und sehe im Code meiner Kollegen oft so etwas:\n\n```cpp\nstd::vector numbers = {5, 2, 8, 1, 9};\nstd::sort(numbers.begin(), numbers.end(), [](int a, int b) { return a < b; });\n```\n\nOder so:\n\n```cpp\nstd::for_each(numbers.begin(), numbers.end(), [](int& x) { x *= 2; });\n```\n\nIch verstehe, dass das irgendwelche anonymen Funktionen sind, aber ich kenne mich nicht ganz aus. In der Dokumentation steht "Lambda-Ausdrücke", aber die Erklärungen sind irgendwie kompliziert. Ich habe ein paar Fragen:\n\n1. Was ist ein Lambda-Ausdruck in einfachen Worten? Was ist der Unterschied zu einer normalen Funktion?\n2. Wozu braucht man die eckigen Klammern `[]` am Anfang? Was kann man dort hineinschreiben?\n3. Wann sollte man besser ein Lambda verwenden und wann eine normale Funktion oder ein Funktor?\n4. Wie fängt man Variablen richtig ein? Ich habe `[=]`, `[&]`, `[` gesehen.