Właśnie zacząłem uczyć się funkcji lambda w C++ i nie rozumiem dlaczego lambda pozwala na przechwytywanie tylko zmiennych automatycznych pamięci masowej? Na przykład:Dlaczego lambda przechwytuje tylko zmienne automatyczne?
int x;
int main() {
[&x](int n){x = n;}; // 'x' cannot be captured...
return 0;
}
Z drugiej strony zmienne statyczne nie trzeba wcale przechwytywania
static int s = 0;
[](int n){s = n;};
tak, to dlaczego pierwszy przykład nie jest dozwolone, a drugi działa?
Nie chodzi o statycznym eliminacjach tyle, ile chodzi o zakres zmiennej http://ideone.com/2qVDaX Ponieważ globalny będą widoczne w lambda niezależnie, przechwytywanie jest zbędne. – StoryTeller
możliwy duplikat [Can a C++ 11 lambda przechwytuje zmienną zakresu pliku?] (Http://stackoverflow.com/questions/20361865/can-a-c11-lambda-capture-a-file-scope-variable) – Pradhan
Myślę, że to interesujące, że porównujesz te dwa przykłady, jakby zachowywały się inaczej. Jeśli sprawisz, że pierwsza nie spróbuje uchwycić 'x' (jak w drugim), to działa. –