«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Lambdas против Bind в C++: когда следует выбирать каждый из них?

Lambdas против Bind в C++: когда следует выбирать каждый из них?

Опубликовано 9 ноября 2024 г.
Просматривать:283

Lambdas vs. Bind in C  : When Should You Choose Each?

Лямбды и 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;

  template 
  void operator()(A a, B b) {
    cout 

В этом примере типы a и b определяются во время выполнения при вызове f. Эта гибкость недоступна для лямбда-выражений.

Эффективность

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

Заключение

Выбор между лямбда-выражениями и связыванием зависит от конкретных требований. приложения. Лямбды обеспечивают полиморфизм и эффективны для захвата небольших переменных типа значения. Bind обеспечивает большую гибкость и может быть предпочтительнее при работе с большими или часто вызываемыми функциями.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3