По какой причине у лямбда-выражений нет конструктора по умолчанию? Есть ли за этим какая-то техническая причина, или это чисто дизайнерское решение?
Почему типы закрытия/лямбда-выражения не имеют конструктора по умолчанию в C++
Ответы (1)
Лямбда-выражения в C++ — это синтаксическое удобство, позволяющее программисту избежать объявления функтора с использованием традиционного синтаксиса, такого как
struct my_functor
{
bool operator()(Object &) { /* do something */ return false; }
}
потому что написание функторов с использованием этого синтаксиса считается слишком длинным для простых функций.
Lambdas предлагает параметры захвата параметров, например [=], [&] и т. д., чтобы избавить вас от объявления переменных и их инициализации, как вы могли бы сделать в конструкторе объекта-функтора.
Таким образом, Lambdas не предоставляет вам никакого синтаксиса конструктора по своему дизайну.
Нет технической причины, по которой лямбда-функция не могла бы раскрыть конструктор, однако, если бы она это сделала, она перестала бы имитировать концепцию дизайна, для которой она названа.
С благодарностью к комментаторам под вопросом.
nullptrдля указателей. - person R Sahu   schedule 17.12.2016int main() { int i; auto l1 = [&i](){}; decltype(l1) l2; }. - person skypjack   schedule 17.12.2016operator(), а не функцию. - person ildjarn   schedule 17.12.2016