Rumah > pembangunan bahagian belakang > C++ > Mengapa Lambda Rekursif Berfungsi dalam C Menyebabkan Ralat Penyusunan, dan Bagaimana Ia Boleh Diselesaikan?

Mengapa Lambda Rekursif Berfungsi dalam C Menyebabkan Ralat Penyusunan, dan Bagaimana Ia Boleh Diselesaikan?

Barbara Streisand
Lepaskan: 2024-12-19 18:23:09
asal
543 orang telah melayarinya

Why Do Recursive Lambda Functions in C   Cause Compilation Errors, and How Can They Be Resolved?

Fungsi Lambda Rekursif dalam C : Dilema Kompilasi

Dalam mereka bentuk fungsi lambda rekursif, anda mungkin menghadapi ralat kompilasi. Mari kita mendalami isu yang dihadapi dan terokai penyelesaiannya.

Fungsi lambda yang disediakan, jumlah, mengumpul hasil operasi matematik, istilah, dalam julat nilai. Untuk menjadikannya rekursif, anda cuba menangkap jumlah lambda dengan rujukan: [istilah, seterusnya, &sum](int a, int b).

Walau bagaimanapun, pendekatan ini membawa kepada ralat kompilasi. Ini timbul daripada perbezaan asas antara fungsi lambda yang diisytiharkan dengan auto dan yang mempunyai jenis yang ditentukan sepenuhnya.

Fungsi Lambda yang disimpulkan dengan auto memperoleh jenisnya daripada pemulaannya. Walau bagaimanapun, apabila mencipta lambda rekursif, lambda belum mempunyai jenisnya sendiri. Ini mewujudkan konflik: penutupan lambda perlu mengetahui jenisnya tetapi belum lagi menentukannya.

Untuk menyelesaikan isu ini, tentukan secara eksplisit jenis lambda dengan std::function

Kod yang diubah suai:

std::function sum;

sum = [term, next, &sum](int a, int b) -> int {
    if (a > b)
        return 0;
    else
        return term(a) + sum(next(a), b);
};

Pengubahsuaian ini memberikan pengkompil maklumat jenis yang diperlukan , membenarkan fungsi lambda rekursif untuk menyusun dan melaksanakan seperti yang dimaksudkan.

Atas ialah kandungan terperinci Mengapa Lambda Rekursif Berfungsi dalam C Menyebabkan Ralat Penyusunan, dan Bagaimana Ia Boleh Diselesaikan?. 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