Rumah > pembangunan bahagian belakang > C++ > Mengapakah Lambda Rekursif Berfungsi dalam C 0x Memerlukan Pengisytiharan Jenis Eksplisit?

Mengapakah Lambda Rekursif Berfungsi dalam C 0x Memerlukan Pengisytiharan Jenis Eksplisit?

Susan Sarandon
Lepaskan: 2024-12-14 10:39:15
asal
927 orang telah melayarinya

Why Does a Recursive Lambda Function in C  0x Require Explicit Type Declaration?

Fungsi Lambda Rekursif dalam C 0x

Ralat dan Penyelesaian

Dalam percubaan untuk mencipta lambda rekursif, anda mengalami ralat semasa menggunakan auto kata kunci untuk membuat kesimpulan jenis lambda. Walau bagaimanapun, apabila anda mengisytiharkan jenis lambda secara eksplisit sebagai fungsi std::, kod tersebut berjaya disusun.

Penaakulan

Inferens Jenis Auto:

Apabila menggunakan auto, pengkompil membuat kesimpulan jenis lambda berdasarkan permulaannya. Walau bagaimanapun, untuk lambda rekursif, penutupan lambda perlu mengetahui jenis yang ditangkapnya (dalam kes ini, jumlah). Ini mewujudkan kebergantungan bulat, kerana jenis lambda bergantung pada jenis penutupannya, yang seterusnya bergantung pada jenis lambda.

Pengisytiharan Jenis Eksplisit:

Mengisytiharkan jenis lambda sebagai std::function menyelesaikan masalah ini kerana objek fungsi itu sendiri tidak perlu "mengetahui" apa-apa tentang perkara yang diberikan kepadanya. Ini membolehkan penutupan lambda menangkap jenis yang sesuai tanpa bergantung pada inferens jenis.

Fungsi Rekursif:

Segmen kod yang disemak:

std::function<int(int, int)> sum;

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

menunjukkan bahawa fungsi lambda rekursif berdaya maju dengan sempurna dalam C 0x. Mereka hanya memerlukan pengisytiharan jenis eksplisit untuk mengatasi isu inferens jenis.

Atas ialah kandungan terperinci Mengapakah Lambda Rekursif Berfungsi dalam C 0x Memerlukan Pengisytiharan Jenis Eksplisit?. 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