Dalam bidang pengekodan C, gelagat operator ' ' digunakan pada lambda (' []{}') telah mencetuskan rasa ingin tahu. Walaupun kod itu kelihatan tidak konvensional, ia secara mengejutkan berjaya menyusun dengan penyusun utama. Tetapi bagaimanakah pengecualian kepada norma ini berfungsi?
Kunci untuk memahami tingkah laku ini terletak pada bebanan operator ' '. Apabila digunakan pada lambda, ' ' mencetuskan penukaran kepada penuding fungsi lama biasa. Ini mungkin kerana lambda yang dimaksudkan adalah tidak menangkap, yang bermaksud ia tidak merujuk sebarang pembolehubah luaran.
Menurut piawaian C (bahagian 5.1.2), objek penutupan lambda yang tidak menangkap mempunyai fungsi penukaran bukan maya awam yang mengembalikan penunjuk fungsi. Penunjuk ini menunjuk kepada fungsi yang mempunyai gelagat yang sama seperti lambda.
Operator ' ' mempunyai beban lampau terbina dalam yang menukar sebarang jenis kepada penuding . Dalam kes lambda, fungsi penukaran yang dinyatakan sebelum ini dipilih sebagai kelebihan beban calon. Hasilnya ialah penunjuk fungsi parameter yang sama dan jenis pengembalian seperti operator panggilan fungsi lambda.
Jadi, apabila ' ' digunakan pada lambda pertama, ia menukar objek penutupan lambda menjadi penunjuk fungsi. Ini memungkinkan untuk menetapkan objek penutupan lambda kedua kepada penuding fungsi yang sama, kerana kedua-dua lambda mempunyai jenis yang serasi.
Ya, kod yang menggunakan ' []{}' ialah pematuhan piawai. Piawaian C membenarkan penukaran objek penutupan lambda yang tidak menangkap kepada penunjuk fungsi. Tingkah laku ini membolehkan beberapa helah pengekodan yang mengejutkan tetapi sah.
Atas ialah kandungan terperinci Bagaimanakah Pengendali ' ' Berfungsi dengan Lambda Tidak Menangkap dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!