Memahami Lambda Generik dalam C 14 Varian Kata Kunci Auto
Dalam C 14, lambdas generik, sejenis ungkapan lambda dengan kata kunci automatik sebagai jenis hujah, memberikan fleksibiliti yang dipertingkatkan. Bertentangan dengan lambda C 11 dengan operator panggilan bukan templat, lambda generik mempunyai operator panggilan templat dalam jenis penutupan yang mereka tentukan.
Sebagai contoh, kod berikut menunjukkan lambda generik:
auto glambda = [](auto a) { return a; };
Dalam kes ini, jenis penutupan glambda akan ditakrifkan sebagai:
class /* unnamed */ { public: template<typename T> T operator () (T a) const { return a; } };
Ini bermakna glambda itu ialah contoh functor yang unik dan tidak dinamakan dengan operator panggilan templat. Setiap kejadian auto dalam pengisytiharan parameter lambda sepadan dengan parameter templat jenis ciptaan, membenarkan operator panggilan mengendalikan argumen jenis yang berbeza.
Piawaian C 14 (n3690) menentukan bahawa operator panggilan jenis penutupan untuk lambda generik mempunyai senarai parameter templat dengan satu parameter templat jenis ciptaan untuk setiap auto dalam lambda parameter-deklarasi-klausa. Jenis pemulangan dan parameter fungsi diperoleh daripada jenis pengembalian dan parameter-pengisytiharan-klausa lambda dengan auto digantikan dengan nama parameter templat ciptaan yang sepadan.
Ringkasnya, lambda generik dalam C 14 mewakili fungsi unik tanpa nama dengan operator panggilan templat. Ini berbeza daripada polimorfisme berasaskan templat C, di mana pengkompil menjana fungsi baharu dengan jenis yang diganti untuk setiap jenis hujah. Ia lebih sejajar dengan generik Java, yang melibatkan pemadaman jenis semasa penyusunan.
Atas ialah kandungan terperinci Bagaimanakah C 14 Generik Lambdas Mencapai Jenis Fleksibiliti Menggunakan Kata Kunci `auto`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!