Rumah >pembangunan bahagian belakang >C++ >Apakah Jenis Yang 'auto' Deduksi untuk Ungkapan Lambda C 11?
Meneroka Jenis Potongan Lambda dengan "auto" dalam C 11
Bertentangan dengan tanggapan salah bahawa jenis lambda ialah penunjuk fungsi, ujian baru-baru ini telah mendedahkan keputusan yang tidak dijangka. Apabila cuba untuk menetapkan ungkapan lambda kepada kedua-dua penuding fungsi dan pembolehubah "auto", penegasan gagal. Ini menimbulkan persoalan, apakah jenis lambda yang sebenar apabila disimpulkan dengan kata kunci "auto"?
Untuk menjelaskannya, ungkapan lambda ialah pintasan sintaksis yang berkesan untuk functors. Semasa penyusunan, lambda diubah menjadi objek functor. Elemen dalam kurungan [] menjadi parameter pembina dan pembolehubah ahli functor, manakala parameter dalam kurungan () diterjemahkan ke dalam parameter operator() functor.
Menariknya, lambda yang tidak menangkap pembolehubah (iaitu, mereka yang tidak mempunyai unsur dalam []) boleh ditukar menjadi penunjuk fungsi (walaupun penukaran ini tidak disokong oleh MSVC2010). Walau bagaimanapun, adalah penting untuk menekankan bahawa jenis intrinsik lambda kekal sebagai jenis functor yang tidak ditentukan.
Dalam contoh kod yang disediakan, ungkapan lambda LAMBDA pada mulanya diberikan kepada penunjuk fungsi pFptr dan kemudian kepada "auto " pembolehubah pAuto. Penegasan seterusnya mengesahkan bahawa jenis pFptr dan pAuto adalah sama, yang sememangnya lulus. Ini menunjukkan bahawa kata kunci "auto" berjaya menyimpulkan jenis lambda menjadi penuding fungsi, membenarkan penetapan yang lancar kepada pFptr.
Walau bagaimanapun, perkara utama ialah lambda adalah jenis functor yang tidak ditentukan, tanpa mengira keupayaan mereka untuk dimasukkan ke dalam penunjuk fungsi. Perbezaan ini menyerlahkan fleksibiliti dan kerumitan ungkapan lambda dalam pengaturcaraan C moden.
Atas ialah kandungan terperinci Apakah Jenis Yang 'auto' Deduksi untuk Ungkapan Lambda C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!