Rumah > pembangunan bahagian belakang > C++ > Mengapa Fungsi Lambda Rekursif Saya Gagal Disusun, dan Bagaimana Saya Boleh Membetulkannya?

Mengapa Fungsi Lambda Rekursif Saya Gagal Disusun, dan Bagaimana Saya Boleh Membetulkannya?

Patricia Arquette
Lepaskan: 2024-12-13 13:46:11
asal
928 orang telah melayarinya

Why Does My Recursive Lambda Function Fail to Compile, and How Can I Fix It?

Menyelesaikan Isu Penyusunan dengan Fungsi Lambda Rekursif

Dalam cuba mentakrifkan fungsi lambda rekursif, kod berikut gagal untuk disusun:

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

Ralat berpunca daripada ketidakupayaan untuk menggunakan "auto" apabila memulakan fungsi lambda yang menangkap dirinya sendiri. Inferens jenis automatik tidak dapat menentukan jenis pemulangan lambda, kerana ia bergantung pada pembolehubah yang ditangkap.

Untuk membetulkan isu ini, langkah berikut boleh diambil:

  1. Gunakan Jenis Objek Fungsi Yang Ditentukan Penuh:

    std::function<int(int,int)> 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

    Menentukan fungsi jenis objek menghapuskan keperluan untuk inferens jenis auto, membenarkan pengkompil menentukan jenis pemulangan dengan tepat.

  2. Mulakan Objek Fungsi Kemudian:

    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

    Memulakan objek fungsi tanpa nilai awal membolehkan pengkompil membuat kesimpulan jenisnya dalam tugasan kenyataan.

Atas ialah kandungan terperinci Mengapa Fungsi Lambda Rekursif Saya Gagal Disusun, dan Bagaimana Saya Boleh Membetulkannya?. 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