2016-12-16 2 views
2

В чем причина, почему lambdas не имеет конструктора по умолчанию? Есть ли какая-то техническая причина, или это чистое дизайнерское решение?Почему типы закрытия/lambdas не имеют конструктора по умолчанию в C++

+1

Какова была бы цель? Он создается, когда вы его объявляете. – NathanOliver

+4

Что вы планируете использовать конструктор по умолчанию? –

+0

@NathanOliver, мне бы понравилась построенная по умолчанию функция лямбда в [этом ответе] (http://stackoverflow.com/a/41189224/434551). Подумайте об этом как о аналоге «nullptr» для указателей. –

ответ

0

Лямбда в C++ является синтаксическим удобство, чтобы позволить программисту избежать объявлений функтора, используя традиционный синтаксис как

struct my_functor 
{ 
bool operator()(Object &) { /* do something */ return false; } 
} 

, потому что пишущие функторы, используя этот синтаксис считаются слишком долго наматываются для простых функций.

Lambdas предлагает параметры захвата параметров, например [=], [&] и т. Д., Чтобы вы могли объявлять переменные и инициализировать их, как вы могли бы сделать в конструкторе объекта-функтора.

Так что Lambdas не раскрывает вам никакого синтаксиса конструктора.

Нет никакой технической причины, чтобы функция лямбда не могла выставить конструктор, однако если бы это было сделано, это прекратило бы имитировать концепцию дизайна, для которой она названа.


Благодаря комментаторам вопроса.

+1

Lambdas действительно выставляет копии и перемещает конструкторы. – AndyG

Смежные вопросы