LINUX.ORG.RU

История изменений

Исправление 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(). Если нет списка захвата - то это объект без членов и его можно привести к обычному указателю на функцию. А вот со списком захвата так уже не прокатит. Лямбда может хранить состояние и менять его.