Подтвердить что ты не робот

Что произойдет, если я запишу локальную переменную по ссылке, и она выходит за рамки?

Предположим, что я использую лямбда в качестве функции обратного вызова, а при создании лямбда я фиксирую локальную переменную функции по ссылке. Предположим теперь, что объект лямбда не запускается до тех пор, пока эта локальная функция не выйдет из области видимости. Что происходит?

Я понимаю, что было бы очень глупо, если бы кто-то сделал это, если есть вероятность, что это произойдет, но я почти уверен, что кто-то это сделает.

4b9b3361

Ответ 1

Да, это будет следовать за болтливой ссылкой. Похоже, вы беспокоитесь о дизайне интерфейса: "Я почти уверен, что кто-то закончит это". Пожалуйста, не отклоняйте лямбда и std::function на этой основе, так как они не более опасны, чем любая другая альтернатива. Lambdas - это просто более простой способ определения локальных функторов. std::function - лучший интерфейс для постоянных, полиморфных функторов, лямбда или нет.

Проблема с областью действия - это то, почему ее легче захватывать по значению. Пользователь не получит ссылку, если не напишет &. Конечно, опасность в том, что кто-то привык начинать все свои лямбда-функции с [&], так как ссылки "быстрее". Надеюсь, любой такой человек скоро выучит свой урок... хотя некоторые счастливые люди с указателем просто неисправимы.

Ответ 2

То же самое происходит, когда вы возвращаете ссылку на локальную переменную: undefined.