Получение ссылки по ссылке в лямбде C ++ 11
Учти это:
#include <functional>
#include <iostream>
std::function<void()> make_function(int& x) {
return [&]{ std::cout << x << std::endl; };
}
int main() {
int i = 3;
auto f = make_function(i);
i = 5;
f();
}
Эта программа гарантированно выведет5
без вызова неопределенного поведения?
Я понимаю, как это работает, если я фиксируюx
по значению ([=]
), но я не уверен, что вызываю неопределенное поведение, захватывая его по ссылке. Может ли быть так, что я получу висячую ссылку послеmake_function
возвращает, или гарантированная работа захваченной ссылки будет работать до тех пор, пока объект исходной ссылки все еще там?
Ищите здесь конкретные основанные на стандартах ответы :) На практике это работает достаточно хорошодо сих пор ;)