В чем причина, почему lambdas не имеет конструктора по умолчанию? Есть ли какая-то техническая причина, или это чистое дизайнерское решение?Почему типы закрытия/lambdas не имеют конструктора по умолчанию в C++
ответ
Лямбда в C++ является синтаксическим удобство, чтобы позволить программисту избежать объявлений функтора, используя традиционный синтаксис как
struct my_functor
{
bool operator()(Object &) { /* do something */ return false; }
}
, потому что пишущие функторы, используя этот синтаксис считаются слишком долго наматываются для простых функций.
Lambdas предлагает параметры захвата параметров, например [=], [&] и т. Д., Чтобы вы могли объявлять переменные и инициализировать их, как вы могли бы сделать в конструкторе объекта-функтора.
Так что Lambdas не раскрывает вам никакого синтаксиса конструктора.
Нет никакой технической причины, чтобы функция лямбда не могла выставить конструктор, однако если бы это было сделано, это прекратило бы имитировать концепцию дизайна, для которой она названа.
Благодаря комментаторам вопроса.
Lambdas действительно выставляет копии и перемещает конструкторы. – AndyG
- 1. Kotlin: почему параметры конструктора имеют «внутреннюю» видимость по умолчанию?
- 2. понимание конструктора по умолчанию C++
- 3. Почему у QAction нет конструктора по умолчанию?
- 4. Только объявление конструктора по умолчанию в C++
- 5. конструктора по умолчанию не вызывается
- 6. Почему некоторые типы не имеют литерала-модификаторов
- 7. Значения по умолчанию для неявного конструктора по умолчанию в C++
- 8. В чем смысл неявного конструктора по умолчанию C++?
- 9. не имеет конструктора по умолчанию
- 10. Установка значений по умолчанию конструктора в C++
- 11. C++ нет подходящего конструктора по умолчанию
- 12. Реализация конструктора по умолчанию
- 13. C++ - Нет подходящего конструктора по умолчанию
- 14. Использование конструктора по умолчанию и параметризованного конструктора в единстве C#
- 15. C# Инициализатор объекта без конструктора по умолчанию
- 16. Почему нет конструктора по умолчанию для структуры?
- 17. Почему типы IBAction по умолчанию для AnyObject?
- 18. C# Конструктор - почему конструктор по умолчанию генерируется компилятором только если нет конструктора, а когда нет конструктора по умолчанию не
- 19. Почему общие типы не имеют явного макета?
- 20. поведение по умолчанию определенного конструктора копирования C++
- 21. Изменение конструктора копии по умолчанию C++
- 22. Конструктор аргументов конструктора C++ по умолчанию
- 23. C++ Нет соответствующего конструктора по умолчанию
- 24. C++ Ошибка c2512: Нет конструктора по умолчанию
- 25. Вызов конструктора по умолчанию
- 26. Нет конструктора по умолчанию для child-C++
- 27. По умолчанию шаг конструктора
- 28. Нет конструктора по умолчанию?
- 29. не имеет конструктора по умолчанию в манифесте
- 30. C++ вызов конструктора не по умолчанию в качестве члена
Какова была бы цель? Он создается, когда вы его объявляете. – NathanOliver
Что вы планируете использовать конструктор по умолчанию? –
@NathanOliver, мне бы понравилась построенная по умолчанию функция лямбда в [этом ответе] (http://stackoverflow.com/a/41189224/434551). Подумайте об этом как о аналоге «nullptr» для указателей. –