Size: a a a

cxx.Дискуссионная

2020 March 19

FF

Flex Ferrum in cxx.Дискуссионная
Roy Mustang
В смысле локальная переменная, она же вроде не создается каждый раз при вызове функции где лямбда как переменная используется
Эм... А как тогда будет список захвата формироваться, зависящий от контекста объявления и значений локальных переменных в этом контексте? Так то понятно, что это - класс (локальный, иногда - шаблонный, с некоторыми особенностями), "созданный" компилятором один раз. Но именно экземпляр лямбды (как объект) создаётся при каждом входе в функцию. Если, конечно, его не объявить как static.
источник

RM

Roy Mustang in cxx.Дискуссионная
Flex Ferrum
Эм... А как тогда будет список захвата формироваться, зависящий от контекста объявления и значений локальных переменных в этом контексте? Так то понятно, что это - класс (локальный, иногда - шаблонный, с некоторыми особенностями), "созданный" компилятором один раз. Но именно экземпляр лямбды (как объект) создаётся при каждом входе в функцию. Если, конечно, его не объявить как static.
А насколько тогда это затратно по сравнению с обычными функциями?
источник

RM

Roy Mustang in cxx.Дискуссионная
Имею в виду создание лямбд
источник

SK

Sergey Kakurin in cxx.Дискуссионная
Flex Ferrum
Я видел код с четырьмя уровнями вложенности лямбд. Работает. Но выглядит вырвиглазно. Впрочем, джаваскриптеров этим не удивить. :)
Я когда на собесе сказал, что 4 уровня вложенности лямбд на плюсах - это пиздец, мне ответили: "Да нормально, мы пользуемся". После этого я понял, что в эту компанию я не хочу
источник

RM

Roy Mustang in cxx.Дискуссионная
Я вот штуки 4 щас создал лямбда переменных внутри вызова функции чтоб не создавать отдельные функции
источник

RM

Roy Mustang in cxx.Дискуссионная
Вот в сравнении с тем чтоб создать отдельные функции, насколько можно оценить разница лямбда функция vs функция?
источник

RM

Roy Mustang in cxx.Дискуссионная
Уступает ли это как то в производительности
источник

FF

Flex Ferrum in cxx.Дискуссионная
Roy Mustang
А насколько тогда это затратно по сравнению с обычными функциями?
Ну, лямбды с непустым списком захвата при создании требуют по крайней мере копирования значений/ссылок. Это если компилятор не заоптимизирует в зависимости от вариантов использования.
источник

RM

Roy Mustang in cxx.Дискуссионная
Flex Ferrum
Ну, лямбды с непустым списком захвата при создании требуют по крайней мере копирования значений/ссылок. Это если компилятор не заоптимизирует в зависимости от вариантов использования.
Непустые
источник

RM

Roy Mustang in cxx.Дискуссионная
То есть, примерную оценку ты не можешь дать
источник

RM

Roy Mustang in cxx.Дискуссионная
Насколько это влияет на производительность
источник

FF

Flex Ferrum in cxx.Дискуссионная
Roy Mustang
Непустые
Тогда - на godbolt и смотреть, что там делается на уровне ассемблера. Только так.
источник

FF

Flex Ferrum in cxx.Дискуссионная
Очень сильно зависит от того, как лямбда используется, в каком контексте, есть ли копирование за пределы скоупа и прочие подобные вещи.
источник

RM

Roy Mustang in cxx.Дискуссионная
У меня в одном месте даже вот такая лямбда есть
источник

RM

Roy Mustang in cxx.Дискуссионная
источник

RM

Roy Mustang in cxx.Дискуссионная
Тут в лямбде еще 2 лямбды
источник

RM

Roy Mustang in cxx.Дискуссионная
где внутренняя лямбда захватывает лямбду из наружней лямбды
источник

RM

Roy Mustang in cxx.Дискуссионная
вон там fSetData лямбду захватывает fCreateUserID
источник

Е

Егор in cxx.Дискуссионная
источник

AZ

Alexander Zaitsev in cxx.Дискуссионная
ммм, код скринами
источник