Я читал эти объяснения на страницах MSDN, за преимущества выражения лямбда над функтором и указателем функции. Что подразумевается под умением «сохранить состояние»? Связано ли это с возможностью захвата некоторых переменных посредством ref или значения в охватывающей области?C++ Что означает «состояние сохранения»?
http://msdn.microsoft.com/en-us/library/dd293608.aspx
При написании кода, вы, вероятно, использовать указатели на функции и функции объектов для решения задач и выполнения вычислений. Обе функции указатели и функциональные объекты имеют преимущества и недостатки: указатели на функции включают минимальные синтаксические служебные данные, но они не сохраняют состояние в пределах области; объекты функции могут поддерживать состояние, но им требуются синтаксические служебные данные определения класса.
Лямбда-выражения - это метод программирования, который сочетает в себе преимущества указателей функций и функциональных объектов, что позволяет избежать их недостатков: . Лямбда-выражения являются гибкими и могут поддерживать состояние , подобно объектам функций, и их компактный синтаксис удаляет необходимость определения класса, для чего требуются объекты функции. Лямбда-выражения позволяют писать код, который является менее громоздким и менее подвержен ошибкам, чем эквивалентный функциональный объект.
Следующие примеры сравнивают использование лямбда-выражения с использованием функционального объекта . В первом примере используется лямбда-выражение для печати на консоль независимо от того, является ли каждый элемент в векторном объекте четным или нечетным. Второй пример использует объект функции для выполнения той же задачи .
Не могли бы вы указать на некоторую релевантную ссылку на темы scope, state, maintenance state, преимущества лямбда-выражений?
Спасибо и привет
Хм ... вам не нужно «изменяться» где-нибудь в определении лямбда, чтобы это работало? –
@ MatthieuM. Да спасибо. Я почти всегда захватываю по ссылке, поэтому я забыл об этом. –
@BenjaminLindley Но при захвате по ссылке вам нужно изменить для изменения упомянутого объекта, не так ли? –