Mengapakah gelung untuk berasaskan julat gagal apabila digunakan pada tatasusunan yang dihantar kepada fungsi bukan utama dalam C ?

Linda Hamilton
Lepaskan: 2024-10-25 02:15:29
asal
985 orang telah melayarinya

Why does a range-based for-loop fail when used on an array passed to a non-main function in C  ?

Julat Berdasarkan Untuk-gelung pada Tatasusunan Dihantar kepada Fungsi Bukan Utama

Soalan:

Dalam projek C, percubaan untuk menggunakan gelung untuk berasaskan julat pada tatasusunan yang dihantar kepada fungsi bukan utama gagal untuk disusun. Kod tersebut menimbulkan ralat berkenaan ketidakupayaan untuk mencari panggilan fungsi yang sepadan untuk begin(int*&) semasa cuba mengakses gelung untuk berasaskan julat dalam fungsi bukan utama.

Jawapan:

Apabila anda menghantar tatasusunan kepada fungsi bukan utama, tatasusunan itu mereput menjadi penuding, kehilangan maklumat penting tentang saiznya. Untuk mendayakan gelung berasaskan julat dalam fungsi bukan utama:

  1. Gunakan Rujukan Tatasusunan: Lulus tatasusunan melalui rujukan dan bukannya penuding. Ini mengekalkan maklumat saiz:

    <code class="cpp">void foo(int (&&bar)[3]);</code>
    Salin selepas log masuk
  2. Pendekatan Generik: Gunakan templat fungsi dengan parameter templat yang menentukan saiz tatasusunan. Pendekatan ini membolehkan saiz tatasusunan yang berbeza diluluskan:

    <code class="cpp">template <std::size_t array_size>
    void foo(int (&&bar)[array_size]);</code>
    Salin selepas log masuk

Dengan mengekalkan maklumat saiz, gelung untuk berasaskan julat boleh melelarkan elemen tatasusunan dengan betul dalam bukan- fungsi utama.

Atas ialah kandungan terperinci Mengapakah gelung untuk berasaskan julat gagal apabila digunakan pada tatasusunan yang dihantar kepada fungsi bukan utama 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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!