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?
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?
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.
OK, pytanie już zostało odebrane, moje złe, ale dziękuję. – anhoppe
oops, przeoczyłem to. Ale i tak dziękuję. – anhoppe
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
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