Лямбды и Bind в C: полиморфизм и эффективность
При сравнении использования лямбда-выражений C 0x и std::bind для аналогичных задач на выбор между ними могут влиять такие факторы, как полиморфизм и эффективность.
Подробнее о привязке и лямбде
Рассмотрите следующий пример, в котором и лямбда, и привязка используются для генерации случайных чисел с использованием распределения и механизма:
// Using lambda auto dice = [&]() { return distribution(engine); }; // Using bind auto dice = bind(distribution, engine);
Полиморфизм
В отличие от лямбда-выражений, которые являются мономорфными (т. е. имеют фиксированные типы), std::bind допускает полиморфность поведение. Это означает, что привязку можно использовать для создания функций неизвестных типов, как показано ниже:
struct foo { typedef void result_type; templatevoid operator()(A a, B b) { cout В этом примере типы a и b определяются во время выполнения при вызове f. Эта гибкость недоступна для лямбда-выражений.
Эффективность
В целом лямбда-выражения, как правило, более эффективны, чем связывание, когда захваченные переменные используются по значению. Это связано с тем, что лямбда-выражения захватывают переменные напрямую, а привязка создает замыкающий объект, который ссылается на захваченные переменные. Однако связывание может иметь преимущества, когда захватываемые переменные большие или когда функция вызывается часто.
Заключение
Выбор между лямбда-выражениями и связыванием зависит от конкретных требований. приложения. Лямбды обеспечивают полиморфизм и эффективны для захвата небольших переменных типа значения. Bind обеспечивает большую гибкость и может быть предпочтительнее при работе с большими или часто вызываемыми функциями.
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3