Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Lebih Suka `std::bind` Daripada Lambdas dalam C 14?

Bilakah Anda Harus Lebih Suka `std::bind` Daripada Lambdas dalam C 14?

Barbara Streisand
Barbara Streisandasal
2024-12-23 09:09:34377semak imbas

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

Mengapa Pertimbangkan std::bind Over Lambdas dalam C 14?

C 14 memperkenalkan ungkapan lambda yang berkuasa, menyebabkan sesetengah pihak mempersoalkan kaitan berterusan std::bind. Walaupun lambdas menawarkan sintaks ringkas, std::bind mengekalkan utilitinya secara tertentu senario.

Pembolehubah Tangkap Tidak Boleh Alih:
Dalam C 11, lambdas hanya boleh menangkap pembolehubah nilai, manakala bind membenarkan pembolehubah bergerak. Melalui bind, anda boleh menulis kod berikut:

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

Tangkap ungkapan:
lambda tidak boleh menangkap ekspresi secara langsung. Sebaliknya, bind membenarkan penulisan seperti ini:

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

Parameter kelebihan beban objek fungsi:
Dalam C 14, lambdas boleh menyelesaikan masalah ini melalui inferens jenis, dan mengikat di sini Masih hebat. di tempat kejadian.

Tidak dapat melepasi parameter:
Sebaik-baiknya, ikatan yang perlu menggunakan pemajuan sempurna boleh ditulis seperti kod berikut:

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

Walau bagaimanapun Sebaliknya, bind menyekatnya kepada bentuk berikut:

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

Kelemahan bind:

  • Nama ikatan boleh membawa kepada kesamaran dalam fungsi terlampau beban.
  • Fungsi lebih berkemungkinan diselaraskan apabila menggunakan bind daripada lambda.

Walaupun begitu, bind tetap ada kelebihannya. Ia hanya menghasilkan jenis objek fungsi, manakala lambda mungkin menghasilkan jenis unik untuk setiap fungsi. Akhirnya, memilih bind atau lambda bergantung pada kes penggunaan dan pertukaran tertentu.

Atas ialah kandungan terperinci Bilakah Anda Harus Lebih Suka `std::bind` Daripada Lambdas dalam C 14?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn