2013-03-21 17 views
5

bei dieser Probe Lambda-Suche:C++ 11 Lambdas und die eckigen Klammern

[](int factor)->int{return factor*factor;} 

Kann jemand mir erklären, was die eckigen Klammern vor einem Lambda-Ausdruck C++ 11 für gut?

+0

oops, es übersehen. Aber trotzdem danke. – anhoppe

+1

Nebenbei, und in den anderen Antworten nicht erwähnt, machen die '[]' auch das Parsen, dass es hier einen Lambda-Ausdruck gibt: Stellen Sie sich den Kontext vor, in dem Sie einen Lambda-Ausdruck haben können. Können Sie sich einen solchen Kontext vorstellen, in dem es sinnvoll wäre, "[" gleichzeitig zu verwenden? – Yakk

+0

hehe du hast Recht, ich denke, das ist etwas, das nicht sehr viele Leute (wie mich) einfällt. Aber gut, würde ich sagen. – anhoppe

Antwort

6

Die eckigen Klammern geben an, welche Variablen vom Lambda "erfasst" werden und wie (nach Wert oder Referenz).

Capture bedeutet, dass Sie innerhalb des Lambda auf die Variable außerhalb des Lambda verweisen können. Bei der Erfassung nach Wert erhalten Sie den Wert der Variablen zum Zeitpunkt der Lambda-Erstellung - ähnlich wie bei der Übergabe eines Parameters an eine Funktion nach Wert. Wenn Sie durch Referenz erfassen, haben Sie einen Verweis auf die tatsächliche Variable außerhalb des Lambda (und Sie müssen sicherstellen, dass sie im Gültigkeitsbereich bleibt).

Beachten Sie, dass Sie in einer Klasse "this" erfassen und dann Klassenmethoden wie in einer Klassenmethode aufrufen können.

+0

Ok, die Frage wurde wirklich schon beantwortet, mein Schlechter, aber danke. – anhoppe

Verwandte Themen