Rumah >pembangunan bahagian belakang >C++ >Bilakah Anda Harus Lebih Suka `std::bind` Daripada 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&& 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:
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!