Rumah > pembangunan bahagian belakang > C++ > Mengapakah ` []{}` Mendayakan Penugasan Semula Lambda dalam C ?

Mengapakah ` []{}` Mendayakan Penugasan Semula Lambda dalam C ?

Linda Hamilton
Lepaskan: 2024-12-28 05:34:09
asal
264 orang telah melayarinya

Why Does ` []{}` Enable Lambda Reassignment in C  ?

Menyahkod Operator " " Ajaib: Memahami " []{}" Lambda

Dalam pemerhatian yang membingungkan, awalan " " tunggal kepada ungkapan lambda dalam C secara ajaib membolehkan penugasan semulanya. Sihir yang penuh teka-teki ini menimbulkan persoalan: mengapa kod berikut berjaya disusun?

int main() {
    auto test = +[]{}; // The "+" operator casts a lambda to a function pointer
    test = []{};
}
Salin selepas log masuk

Jawapannya terletak pada kedalaman piawai C yang tidak jelas. " " mencetuskan penukaran kepada penuding fungsi lama biasa untuk lambda. Lambda, kerana tidak menangkap, sememangnya mempunyai fungsi penukaran kepada penunjuk fungsi dengan tandatangan yang sama. Fungsi penukaran ini, seperti yang ditakrifkan dalam standard C, mengembalikan alamat fungsi yang berkelakuan sama dengan operator panggilan fungsi lambda.

Operator " " unary, apabila digunakan pada objek penutupan yang dijana oleh lambda, melibatkan satu set lebihan terbina dalam. Salah satu beban lampau ini menerima sebarang jenis penuding dan menukarnya kepada penuding fungsi. Penukaran jenis penutupan kepada penuding fungsi, satu-satunya fungsi calon yang terlebih beban, oleh itu diutamakan.

Oleh itu, jenis "ujian" dalam "ujian automatik = []{};" disimpulkan sebagai "void(*)()". Keserasian penunjuk fungsi ini membolehkan penetapan objek lambda/penutupan kedua untuk "menguji" walaupun jenis penutupannya berbeza.

Pengetahuan ini mendedahkan rahsia di sebalik kejayaan lambda " []{}". Dengan menghantar lambda ke penuding fungsi, ia memintas sekatan untuk mentakrifkan semula lambda, membuka kunci keupayaan untuk menetapkan objek lambda baharu.

Atas ialah kandungan terperinci Mengapakah ` []{}` Mendayakan Penugasan Semula Lambda dalam C ?. 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