Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
1

Лямбда как аргумент по ссылке

06.07.2023, 12:37. Показов 474. Ответов 2

Author24 — интернет-сервис помощи студентам
Вопрос собственно почему передача лямбды по ссылке приводит к её копированию:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <functional>
 
 void invoke(const std::function<void(void)>& fn) {
    fn();
 }
 
int main(int argc, char const *argv[])
{
    int i{ 0 };
 
    auto count {
        [i]() mutable {
            std::wcout << ++i << '\n';
        }
    };
 
    count();    // 1
    count();    // 2
    count();    // 3
 
    invoke(count);  // 4  !
    invoke(count);  // 4  !
    invoke(count);  // 4  !
    
    return EXIT_SUCCESS;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2023, 12:37
Ответы с готовыми решениями:

Как лучше передавать аргумент в функцию - по ссылке или по указателю?
Предположим, что нам нужно в функцию передать значение переменной чтобы по окончанию работы функции...

Напишите выражение для переменной var, используемой как аргумент по ссылке?
На этот вопрос написан правильный ответ &quot;var&amp;&quot; Подскажите пожалуйста что это значит? и где такое...

Не понятно, откуда лямбда. Выражение принимает аргумент
вот пример функции: bool EventListenerKeyboard::init() { auto listener = (Event* event) {...

Откуда в данном примере лямбда выражение принимает аргумент
вот пример функции: bool EventListenerKeyboard::init() { auto listener = (Event* event) {...

Лямбда выражение как аргумент функции
Есть такая функция сортировки: template &lt;typename type&gt; void TQuickSort(type* arr, int...

2
Неэпический
18105 / 10692 / 2062
Регистрация: 27.09.2012
Сообщений: 26,918
Записей в блоге: 1
06.07.2023, 12:39 2
Лучший ответ Сообщение было отмечено moskitos80 как решение

Решение

Цитата Сообщение от moskitos80 Посмотреть сообщение
передача лямбды по ссылке
ссылка же на std::function

C++
1
2
3
4
template<typename T>
 void invoke(T&& fn) {
    fn();
 }
2
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
06.07.2023, 13:28  [ТС] 3
Спасибо, большое. Действительно кроме служебных конструкторов у типа std::function есть только один:

Лямбда как аргумент по ссылке


Видимо моем случае при вызове invoke(const std::function<void(void)>& fn) - происходит сначала преобразование, посредством вызова конструктора: function(_Functor&& __f), далее получается объект function содержащий копию count, а уже после этот объект типа function передается по ссылке в invoke. В итоге все-равно вызывается копия лямбды. Теперь понятно
0
06.07.2023, 13:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.07.2023, 13:28
Помогаю со студенческими работами здесь

как передать аргумент по ссылке в JScript?
&lt;% var v1, v2; v1 = new Number(); v2 = new Number(); test (v1, v2); Response.Write (v1 + ';...

Как передать в функцию аргумент по ссылке?
Как привести этот код в адекватный вид? Как передать значения ф-ций по ссылке? Хотелось бы...

Как передать аргумент в виде инт по ссылке для функции ?
Всем привет, я новичок в Java. Хочу передавать аргумент в виде инт по ссылке для функции. По Си++ я...

Лямбда-функция захватывающая по ссылке два параметра и изменяющая их значения
Написать лямбда=функции, которые будут 3. Захватывать по ссылке два параметра и проверять, их...

Лямбда-функция захватывающая по ссылке три параметра и возвращающая их сумму
Написать лямбда=функции, которые будут 4. Захватывать по ссылке три параметра и возвращать их сумму


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru