2013-03-21 37 views
5

Patrząc na ten przykładowy lambda:C++ 11 lambdas i nawiasy kwadratowe

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

Czy ktoś może mi wyjaśnić, co nawiasy kwadratowe z przodu C++ 11 lambda wyrażenia są dobre?

+0

oops, przeoczyłem to. Ale i tak dziękuję. – anhoppe

+1

Odkładając na bok, a nie wspomniany w innych odpowiedziach, '[]' również sprawia, że ​​analiza tekstu jest bardzo łatwa: wyobraźmy sobie kontekst, w którym można uzyskać wyrażenie lambda. Czy potrafisz sobie wyobrazić taki kontekst, w którym uzasadnione byłoby inne użycie '[' w tym samym punkcie? – Yakk

+0

hehe masz rację, myślę, że to coś, co nie przychodzi mi do głowy bardzo wielu ludzi (jak ja). Ale dobry punkt, powiedziałbym. – anhoppe

Odpowiedz

6

Nawiasy kwadratowe określają, które zmienne są "przechwycone" przez lambda i jak (według wartości lub odniesienia).

Capture oznacza, że ​​można odnieść się do zmiennej spoza lambda z wnętrza lambda. W przypadku przechwytywania według wartości, otrzymasz wartość zmiennej w czasie tworzenia lambda - podobnie do przekazywania parametru do funkcji według wartości. Jeśli przechwycisz przez odniesienie, będziesz miał odniesienie do rzeczywistej zmiennej spoza lambda (i musisz upewnić się, że pozostaje w zakresie).

Należy zauważyć, że wewnątrz klasy można przechwycić "to", a następnie wywołać metody klasy tak, jak w metodzie klasy.

+0

OK, pytanie już zostało odebrane, moje złe, ale dziękuję. – anhoppe

Powiązane problemy