Bila Memilih: std::bind vs. Lambdas dalam C 0x?

Mary-Kate Olsen
Lepaskan: 2024-10-30 15:21:12
asal
972 orang telah melayarinya

When to Choose: std::bind vs. Lambdas in C  0x?

Banding dan Kontras: std::bind dan Lambdas dalam C 0x

Dalam C 0x, pengaturcara berhadapan dengan dua pilihan untuk menangkap a fungsi: std::bind dan lambdas. Walaupun kedua-duanya mempunyai tujuan yang berbeza, ia bertindih dalam beberapa aplikasi. Mari kita mendalami kekuatan dan batasan setiap pendekatan, mengambil contoh kefungsian bersilang.

Pertimbangkan tugas untuk mencipta fungsi membaling dadu. Menggunakan lambda, kita boleh menyatakan ini sebagai:

<code class="cpp">auto dice = [&]() { return distribution(engine); };</code>
Salin selepas log masuk

Sebagai alternatif, menggunakan std::bind, kita boleh menulis:

<code class="cpp">auto dice = bind(distribution, engine);</code>
Salin selepas log masuk

Monomorphic vs. Polymorphic

Satu perbezaan asas terletak pada jenis tingkah laku mereka. Lambdas adalah monomorfik, bermakna mereka mempunyai jenis hujah tetap yang ditentukan pada masa penyusunan. Kekangan ini mengehadkan fleksibiliti lambda berbanding rakan bind mereka.

Sebagai contoh, pertimbangkan fungsi yang mencetak dua hujah:

<code class="cpp">auto f = [](auto a, auto b) { cout << a << ' ' << b; }
Salin selepas log masuk

Menggunakan lambda ini dengan jenis parameter yang berbeza akan menghasilkan ralat penyusun. Sebaliknya, std::bind membenarkan tingkah laku polimorfik, membolehkan fungsi terikat kepada argumen pelbagai jenis:

<code class="cpp">struct foo {
  template <typename A, typename B>
  void operator()(A a, B b) {
    cout << a << ' ' << b;
  }
};

auto f = bind(foo(), _1, _2);</code>
Salin selepas log masuk

Dengan menangguhkan potongan jenis sehingga fungsi digunakan, std::bind menawarkan fleksibiliti yang lebih besar untuk mengendalikan pelbagai jenis input.

Atas ialah kandungan terperinci Bila Memilih: std::bind vs. Lambdas dalam C 0x?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!