69 / 57 / 14
Регистрация: 20.12.2013
Сообщений: 656
|
||||||
1 | ||||||
Время жизни лямбда-функции25.12.2017, 20:09. Показов 4951. Ответов 4
Метки нет (Все метки)
A lambda might outlive its caller/ This can happen if we pass a lambda to a different thread or the callee stores away the lambda for latest use. For example:
0
|
25.12.2017, 20:09 | |
Ответы с готовыми решениями:
4
Время жизни объекта C++11 время жизни переменных Время жизни переменных Время жизни объектов |
7796 / 6562 / 2985
Регистрация: 14.04.2014
Сообщений: 28,699
|
|
25.12.2017, 22:03 | 2 |
Почему указатель? Она как объект.
0
|
69 / 57 / 14
Регистрация: 20.12.2013
Сообщений: 656
|
|||||||||||
26.12.2017, 02:58 [ТС] | 3 | ||||||||||
Да, в книге написано, что можно считать ее функциональным объектом, но есть и такая фраза:
A lambda that captures nothing can be assigned to a pointer to function of an appropriate type. А если "плавает как утка, выглядит как утка, крякает как утка, то ...". Вопрос из следующего возник: привел тут на форуме одно решение, сокращенно
Добавлено через 34 минуты p.s. Т.е. похоже, что в случае передачи как указателя передается указатель на operator(), но это ничего не проясняет. Вот сейчас изменил код
Но функция check_age тоже передалась через function<void(std::string ss)> - значит function<void(std::string ss)> тоже указатель на функцию?! Добавлено через 10 минут Добавлено через 7 минут pps Если нужен рабочий текст программы для проверки, то он здесь "Да" и "нет" в качестве величины переменной
0
|
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
|
|
26.12.2017, 05:20 | 4 |
AndrSlav, сложно вас читать...
"почему не происходит удаления тела функции" - тело функции - это код, статическая информация, оно во время выполнения ни создаётся, ни удаляется. В этом нет никакого смысла.
0
|
249 / 219 / 63
Регистрация: 30.07.2013
Сообщений: 465
|
|||||||||||
26.12.2017, 10:55 | 5 | ||||||||||
Сообщение было отмечено AndrSlav как решение
Решение
Реализация лямбд зависит от компилятора. Но для понимания можно считать, что для лямбды компилятор сам создает класс-функтор с автоматически сгенерированным и неизвестным человеку именем (поэтому лямбды объявляются с auto).
А у лямбды без захвата нет состояния, можно просто взять указатель на метод operator() соответствующего класса-функтора. Даже объект создавать не надо (может, компилятор даже его статическим делает). И хранится в указателе на функцию именно указатель на этот метод. Сам метод, его код - повторяю - скрыт от человека.
1
|
26.12.2017, 10:55 | |
26.12.2017, 10:55 | |
Помогаю со студенческими работами здесь
5
Время жизни объекта класса Синглтон и время его жизни Время жизни временного объекта Время жизни переменной и присваивание Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |