#include <iostream>
void foo(int k) {
static auto bar = [&]{
std::cout << k << std::endl;
};
bar();
}
int main() {
foo(1); foo(2); foo(3); // output is correct: 1, 2, 3
}
Sprawdź funkcja foo, jak statyczne lambda jest przechwytywanie k przez odniesienie. To wydaje się działać, i to samo dzieje się z bardziej skomplikowanymi typami danych niż int.referencyjny ujęte w definicji zmiennej statycznej
Czy to jest oczekiwane? Czy istnieje gwarancja, że adres k będzie taki sam dla każdego wywołania foo, czy jest to UB?
Z góry dziękuję i przepraszam, jeśli to było wcześniej odpowiedział (I nie spróbować znaleźć podobne pytanie bez powodzenia)
Adam straciłeś punkt milowy, obawiam się – sehe