Heim >Backend-Entwicklung >C++ >Wann sollten Sie „std::bind' gegenüber Lambdas in C 14 bevorzugen?

Wann sollten Sie „std::bind' gegenüber Lambdas in C 14 bevorzugen?

Barbara Streisand
Barbara StreisandOriginal
2024-12-23 09:09:34421Durchsuche

When Should You Prefer `std::bind` Over Lambdas in C  14?

Warum std::bind anstelle von Lambdas in C 14 in Betracht ziehen?

C 14 führte leistungsstarke Lambda-Ausdrücke ein, was einige dazu veranlasste, die anhaltende Relevanz von std::bind in Frage zu stellen. Während Lambdas eine prägnante Syntax bieten, behält std::bind seinen Nutzen in gewisser Weise bei Szenarien.

Unbewegliche erfasste Variablen:
In C 11 können Lambdas nur L-Wert-Variablen erfassen, während Bind das Verschieben von Variablen ermöglicht. Durch Binden können Sie den folgenden Code schreiben:

auto f1 = std::bind(f, 42, _1, std::move(v));

Ausdruck erfassen:
Lambda kann Ausdrücke nicht direkt erfassen. Stattdessen erlaubt bind das Schreiben wie folgt:

auto f1 = std::bind(f, 42, _1, a + b);

Parameter zum Überladen von Funktionsobjekten:
In C 14 können Lambdas dieses Problem durch Typinferenz lösen, und bind hier Immer noch ein Riesenspaß in der Szene.

Parameter können nicht übergeben werden:
Idealerweise kann die Bindung, die eine perfekte Weiterleitung verwenden muss, wie der folgende Code geschrieben werden:

auto f1 = [=](auto&amp;&amp; arg) { f(42, std::forward<decltype(arg)>(arg)); };

Allerdings Stattdessen blockiert bind es in der folgenden Form:

auto f1 = std::bind(std::declval<decltype(f)>(), 42, _1);
auto f2 = std::bind(f, 42, std::declval<decltype(arg)>(), std::placeholders::_2);

Nachteile von bind:

  • Bind-Namen können in überladenen Funktionen zu Mehrdeutigkeiten führen.
  • Funktionen werden eher inline ausgeführt, wenn Bind als Lambda verwendet wird.

Trotzdem hat bind immer noch seine Vorteile. Es erzeugt nur einen Funktionsobjekttyp, während Lambda für jede Funktion einen eindeutigen Typ erzeugen kann. Letztendlich hängt die Wahl von Bind oder Lambda von spezifischen Anwendungsfällen und Kompromissen ab.

Das obige ist der detaillierte Inhalt vonWann sollten Sie „std::bind' gegenüber Lambdas in C 14 bevorzugen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn