Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
UltraPenguin
228 / 94 / 22
Регистрация: 20.03.2014
Сообщений: 301
Завершенные тесты: 1
#1

В чем плюсы лямбд? - C++

06.10.2015, 13:13. Просмотров 1145. Ответов 47
Метки нет (Все метки)

В чем очевидные и/или измеряемые плюсы лямбд в C++? Повышает ли это скорость кода? Или памяти меньше? Или еще что-то? Ну кроме повышения ЧСВ и того что это стильно-модно-молодежно? Слышал еще, что знание лямбд позволяет подкатывать к девушкам (типа "Детка, пойдем ко мне? Покажу тебе свои лямбда-исчисления А затем мы апплицируем одну интересную лямбда-абстракцию под номером 69 которую я только что выучил"), но сам не проверял. Какие у кого мысли по этому поводу?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.10.2015, 13:13     В чем плюсы лямбд?
Посмотрите здесь:

Использование лямбд - C++
Допустим есть 2 класса A и B, из B нужно вызывать некоторые методы из А, допустим таких методов немного 2-3 не более, а то и во все 1. ...

Верно ли такое использование лямбд - C++
Доброй ночи. Есть функция: void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 ) На вход она принимает...

Переход на плюсы. - C++
Здравствуйте. Я вот уже год как программирую на языке Си, и хотелось бы начать на плюсах... С ужасом обнаружил, что меня пугает даже...

Игродел на C++ плюсы и минусы - C++
Всем добрый день У меня к вам вопрос такой вот я сейчас учу C++ и хотел бы пойти работать за границу Game-developerom когда закончу в...

Плюсы среды Visual Studio 2013 - C++
Я понимаю, что слегка не по теме.., НО.. курсовую написал на C++ и именно в VS 2013. Почему? Потому что такая привычка. Привык к этой...

Перевод на плюсы - с чего начать и где конструктор, создающий GUI - C++
Недавно сделал на скорую руку Updater но результат честно говоря не радует да и хотелось бы чтобы не каждый лол смог получить исходной код...

Дана строка символов, заменить в ней все многоточия на плюсы - C++
пожалуйста!!!!помогите решить задачу дана строка символов.заменить в ней все многоточия на плюсы срочно.очень нужно!

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DrOffset
7062 / 4203 / 949
Регистрация: 30.01.2014
Сообщений: 6,969
06.10.2015, 19:31     В чем плюсы лямбд? #31
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от UltraPenguin Посмотреть сообщение
Может кто-нибудь привести реальный пример, где лямбды обязательны или экономят полотно кода?
Опять же, выше была ссылка и там достаточно примеров.
Хоть и синтаксис лямбд сейчас немного не такой, как в том предложении, но суть должна быть понятна.
А так, можно элементарный пример привести с контейнерами\алгоритмами std. Когда нужен предикат, или трансформирующая функция, но вынесение этой сущности вовне либо сломает инкапсуляцию, либо повредит дизайну, либо банально окажется слишком многословной.
Можно себе представить и более длинные примеры, какой-нибудь регистратор реакции на события, или, скажем, пул потоков, который выполняет лямбду, которая генерируется шаблоном.

Добавлено через 1 минуту
Цитата Сообщение от UltraPenguin Посмотреть сообщение
А вообще кто-нибудь пробовал замерить скорость выполнения кода с лямбдами и без?
Лямбды отлично встраиваются.
Замерять не надо, нужно просто посмотреть ассемблер.

Добавлено через 4 минуты
UltraPenguin, вот, кстати, реальное удобство, после поддержки шаблонных коннектов в Qt: https://wiki.qt.io/New_Signal_Slot_Syntax
См. там пример с лямбдой.
Раньше вот пришлось бы целый слот заводить, который, мало того, что класс загаживает, так еще только и занимался бы, что прокидыванием вызова. А так - просто и понятно, и по файлу скакать не надо, в поисках определения
UltraPenguin
228 / 94 / 22
Регистрация: 20.03.2014
Сообщений: 301
Завершенные тесты: 1
06.10.2015, 19:33  [ТС]     В чем плюсы лямбд? #32
DrOffset, за последний пример особенно спасибо! Будем вкуривать-встраивать))
Kuzia domovenok
1890 / 1745 / 118
Регистрация: 25.03.2012
Сообщений: 5,924
Записей в блоге: 1
06.10.2015, 19:51     В чем плюсы лямбд? #33
DrOffset, использование в алгоритмах, оборачивание однострочных действий, условий в лямбду - ОК.
Но нафига намеренно заменять приятный глазу цикл от 0 до n, на какую-нибудь рекурсивную лямбду? Специально, чтобы сказать "смотрите, без меня вы не разберёте, что тут написано!"
C++
1
auto gi = [a,n](int w, int i, const auto& la) -> int { return i==n || a[i]>w ? i-1 : la(w,i+1,la);};
hoggy
6462 / 2660 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
06.10.2015, 21:20     В чем плюсы лямбд? #34
Цитата Сообщение от _Ivana Посмотреть сообщение
gru74ik, которые граждане первого класса.
Цитата Сообщение от gru74ik Посмотреть сообщение
_Ivana, а разве функциональные объекты в С++ не являются объектами первого класса?
Цитата Сообщение от _Ivana Посмотреть сообщение
если да - тогда я признаю что лохЪ
http://rextester.com/QSDB16731

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
auto foo(auto f) -> decltype(f)
{
    f();
    return f;
};
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    const auto citizen1 = [](){ std::cout<<"ждём ваших признаний!\n"; };
    
    const auto citizen2 = citizen1;
 
    const auto citizen3 = foo( citizen2 );
    
    citizen3();
    citizen3();
}
Добавлено через 2 минуты
Цитата Сообщение от gru74ik Посмотреть сообщение
и именно поэтому их если и передают в качестве параметра, то только как указатель на функцию.
http://rextester.com/AIDIUM4741


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
#include <iostream>
 
void foo( void bar() )
{
    bar();
 
}
 
void bar()
{
    std::cout<<
        "и именно поэтому их если и передают в качестве параметра, "
        "то только как указатель на функцию.\n\n"
    
        "да неужели?\n";
}
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    foo(bar);
}
gru74ik
Модератор
Эксперт CЭксперт С++
4108 / 1753 / 197
Регистрация: 20.02.2013
Сообщений: 4,861
Записей в блоге: 21
06.10.2015, 21:26     В чем плюсы лямбд? #35
hoggy, хмм... То есть, функция может принимать в качестве аргумента не только указатель на функцию, но и просто другую функцию?
daslex
1271 / 516 / 106
Регистрация: 02.08.2011
Сообщений: 2,665
06.10.2015, 21:33     В чем плюсы лямбд? #36
Во втором примере она принимает всего-лишь адрес функции, а не функцию как объект. А потом уже вызывается. Тот же самый указатель.

Добавлено через 2 минуты
Если не так, пусть поправят. Вот я сейчас так вижу. Не иначе. А первый, не знаю просто.
hoggy
6462 / 2660 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
06.10.2015, 21:41     В чем плюсы лямбд? #37
Цитата Сообщение от gru74ik Посмотреть сообщение
не только указатель на функцию, но и просто другую функцию?
в этом отношении они похожи на массивы:
могут неявно каститься к типу "указатель на функцию"

если вас не устраивает указатель на функцию,
можно поиметь ссылку на функцию.

Добавлено через 2 минуты
Цитата Сообщение от daslex Посмотреть сообщение
Тот же самый указатель.
все верно.
C++
1
void foo( void bar() ) //<--- bar указатель на функцию
это просто альтернативная запись

тем не менее, в качестве аргумента выступала функция-объект.

и можно принимать её по ссылке:

http://rextester.com/FWPC18702

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
 
void foo( void (&bar)() )
{
    bar();
 
    if( std::is_reference<decltype(bar)>::value )
        std::cout <<" bar - это ссылка\n";
}
 
void bar()
{
    std::cout << "Hello, world!\n";
}
 
 
int main()
{
    std::cout << "Hello, world!\n";
    
    foo(bar);
}
а ссылку можно срисовать только с объекта.
gru74ik
Модератор
Эксперт CЭксперт С++
4108 / 1753 / 197
Регистрация: 20.02.2013
Сообщений: 4,861
Записей в блоге: 21
06.10.2015, 21:42     В чем плюсы лямбд? #38
UltraPenguin, _Ivana, кстати, вот хорошая статья по сабжу.
_Ivana
3043 / 1730 / 150
Регистрация: 01.03.2013
Сообщений: 4,915
Записей в блоге: 2
06.10.2015, 23:01     В чем плюсы лямбд? #39
Цитата Сообщение от hoggy Посмотреть сообщение
"ждём ваших признаний!\n"
так были уже:
Цитата Сообщение от _Ivana Посмотреть сообщение
хорошо, признаю что лохЪ
но если вам приятно это слышать ((С) из анекдота про "КГБ сгорело"), то еще раз: признаю, что я лохЪ.

ЗЫ самое забавное, что я читал что они "являются объектами первого класса", и даже сам это использовал вовсю - примеры можете найти в недавних моих постах кода в этом разделе форума. Но повторюсь, что меня не покидает смутное ощущение их ограниченности по сравнению с полноценными лямбда-языками, которое может проистекать из-за моего незнания именно плюсовых лямбд. Основано оно на опыте попыток прямой трансляции функциональных алгоритмов и подхода из ФЯ в С++ через лямбды. может где-то конст не написал, а оно очень сильно зависит от этого и не дает ни копировать ни тип автовывести или еще что-то там, или еще что. Но я пока не готов признать С++ "полноценным мультипарадигменным языком" (С), в свете вышеописанных моих сомнений. А gru74ik спросил, и я наспех ответил про граждан первого класса, потому что пока не готов четко озвучить сравнительные ограничения.
hoggy
6462 / 2660 / 460
Регистрация: 15.11.2014
Сообщений: 5,850
Завершенные тесты: 1
06.10.2015, 23:04     В чем плюсы лямбд? #40
Цитата Сообщение от _Ivana Посмотреть сообщение
их ограниченности по сравнению с полноценными лямбда-языками
я честно говоря не знаю, о каких таких ограничениях идет речь.
Voivoid
674 / 277 / 12
Регистрация: 31.03.2013
Сообщений: 1,339
06.10.2015, 23:15     В чем плюсы лямбд? #41
Цитата Сообщение от _Ivana Посмотреть сообщение
Но повторюсь, что меня не покидает смутное ощущение их ограниченности по сравнению с полноценными лямбда-языками
Ага, ложки нашлись, а осадочек остался
_Ivana
3043 / 1730 / 150
Регистрация: 01.03.2013
Сообщений: 4,915
Записей в блоге: 2
06.10.2015, 23:27     В чем плюсы лямбд? #42
Voivoid, ну почти так Только я бы сказал - осадочек уйдет, когда все ложки найдутся
klopik
58 / 58 / 10
Регистрация: 18.05.2015
Сообщений: 295
06.10.2015, 23:34     В чем плюсы лямбд? #43
При правильном применении должна повышаться читаемость кода, но, по сути, это просто дань моды. Типа элементы функциональщины в объектном языке, смешение двух подходов и т.д.
Лямбды более уместны в функциональных языках, чем в C++.
Ну еще LINQ без лямбд явно бы не было.
_Ivana
3043 / 1730 / 150
Регистрация: 01.03.2013
Сообщений: 4,915
Записей в блоге: 2
07.10.2015, 04:50     В чем плюсы лямбд? #44
Цитата Сообщение от gru74ik Посмотреть сообщение
кстати, вот
спасибо. Алаверды - http://habrahabr.ru/post/149056/

Добавлено через 8 минут
ЗЫ и оттудова (от автора статьи)
GooRoo 6 августа 2012 в 18:20
А вообще по-хорошему и лямбды в С++ не лямбды.
Но у него, в отличие от меня, хватает знаний обосновать это. Поэтому я признаю, что лохЪ, а он пишет волшебные статьи на Хабр И осадочек так и остается, да
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2015, 08:47     В чем плюсы лямбд?
Еще ссылки по теме:

В чем плюсы использования автоматически реализуемых свойств? - C#
В чем плюсы использования автоматически реализуемыех свойств?ведь они ничем не отличаются от простых переменных,так как там тоже нельзя...

На чем легче писать игры? плюсы и минусы. - OpenGL
Народ,а как вы думаете/имели опыт на чем легче писать игры, и насколько хорошо возможно потом будет реализовать хорошо сделанную игру? ...

Разработка мобильного приложения на Delphi XE - в чем плюсы и минусы? - Программирование Android
Стоит ли писать приложения под мобильные платформы на Delphi XE ? Если true, тогда какие негативные моменты могут появиться ? Например,...

Целесообразность написания дополнительных скобок или "с чем плюсы вкуснее?" - C++
Ну, Вам правильно ответили, но второе условие и так будет исполняться. Т.е. если текст не пустой, то будет срабатывать любое из значений, а...

Final переменные для лямбд - Java SE
Есть некоторая коллекция цветов и некоторая коллекция кнопок (можно и не кнопок, суть не в них, суть в лямбдах). Циклом for каждой кнопке...


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

Или воспользуйтесь поиском по форуму:
mporro
256 / 102 / 14
Регистрация: 04.07.2014
Сообщений: 571
07.10.2015, 08:47     В чем плюсы лямбд? #45
_Ivana
В контексте обсуждения фраза про "лямбды" эквивалентна утверждению "С++ -- это не настоящий функциональный язык".
Yandex
Объявления
07.10.2015, 08:47     В чем плюсы лямбд?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru