Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Pengendali ' ' Berfungsi dengan Lambda Tidak Menangkap dalam C ?

Bagaimanakah Pengendali ' ' Berfungsi dengan Lambda Tidak Menangkap dalam C ?

DDD
DDDasal
2024-12-22 18:21:14349semak imbas

How Does the ' ' Operator Work with a Non-Capturing Lambda in C  ?

Lambda Positif: ' []{}' - Rahsia Terbongkar

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?

Penukaran kepada Penunjuk Fungsi

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.

Lebih Beban Operator Terbina dalam

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.

Keakuran Standard

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!

Kenyataan:
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