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
Freigeben: 2024-12-23 09:09:34
Original
472 Leute haben es durchsucht

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));
Nach dem Login kopieren

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);
Nach dem Login kopieren

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)); };
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage