История изменений
Исправление rumgot, (текущая версия) :
я понял в чём проблема, вы все думаете, что лямбды - это не анонимные функции, а некие объекты. они действительно есть некие объекты, но это детали реализации
Это реализация, да, но не та реализация, которая называется implementation defined.
Реализация лямбд частично описывается стандартом, вот например пункт 1 (N4659 (C++17)):
The type of a lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union class type, called the closure type, whose properties are described below.
Далее там описано, что лямбда имеет operator()
и прочее.
разработчики лямбд врядли предполагали, что с ними будут работать как с объектами, все же думали, что ними будут работать как с функциями
Ну я бы так не утверждал. Лямбда - это то чем она и является - объектом с перегруженным operator()
. Если нет списка захвата - то это объект без членов и его можно привести к обычному указателю на функцию. А вот со списком захвата так уже не прокатит. Также лямбда может хранить состояние и менять его. Поэтому все-таки я бы относился к лямбде как к объекту.
Исправление rumgot, :
я понял в чём проблема, вы все думаете, что лямбды - это не анонимные функции, а некие объекты. они действительно есть некие объекты, но это детали реализации
Это реализация, да, но не та реализация, которая называется implementation defined.
Реализация лямбд частично описывается стандартом, вот например пункт 1 (N4659 (C++17)):
The type of a lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union class type, called the closure type, whose properties are described below.
Далее там описано, что лямбда имеет operator()
и прочее.
разработчики лямбд врядли предполагали, что с ними будут работать как с объектами, все же думали, что ними будут работать как с функциями
Ну я бы так не утверждал. Лямбда - это то чем она и является - объектом с перегруженным operator()
. Если нет списка захвата - то это объект без членов и его можно привести к обычному указателю на функцию. А вот со списком захвата так уже не прокатит. Также лямбда может хранить состояние и менять его. Поэтому все-таки я бы относился к лямбде как к объектам.
Исходная версия rumgot, :
я понял в чём проблема, вы все думаете, что лямбды - это не анонимные функции, а некие объекты. они действительно есть некие объекты, но это детали реализации
Это реализация, да, но не та реализация, которая называется implementation defined.
Реализация лямбд частично описывается стандартом, вот например пункт 1 (N4659 (C++17)):
The type of a lambda-expression (which is also the type of the closure object) is a unique, unnamed non-union class type, called the closure type, whose properties are described below.
Далее там описано, что лямбда имеет operator()
и прочее.
разработчики лямбд врядли предполагали, что с ними будут работать как с объектами, все же думали, что ними будут работать как с функциями
Ну я бы так не утверждал. Лямбда - это то чем она и является - объектом с перегруженным operator()
. Если нет списка захвата - то это объект без членов и его можно привести к обычному указателю на функцию. А вот со списком захвата так уже не прокатит. Лямбда может хранить состояние и менять его.