Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bila Memilih Lulus Mengikut Nilai vs Lulus dengan Rujukan Rnilai dalam C ?

Bila Memilih Lulus Mengikut Nilai vs Lulus dengan Rujukan Rnilai dalam C ?

Barbara Streisand
Barbara Streisandasal
2024-10-24 05:00:31575semak imbas

When to Choose Pass by Value vs Pass by Rvalue Reference in C  ?

Pass by Value vs Pass by Rvalue Rujukan

Memutuskan antara lulus dengan nilai atau lulus dengan rujukan rvalue untuk parameter fungsi bergantung pada beberapa faktor.

Pass by Value

  • (Widget w)

    • Mencipta salinan parameter input, meninggalkan yang asal tidak berubah.
    • Melibatkan operasi penyalinan tersirat, yang boleh menjadi tidak cekap untuk objek besar atau kompleks.
    • Anggap pemilikan parameter, walaupun ia tidak mengubah suainya .

Lulus Rujukan Nilai R

  • (Widget&& w)

    • Memulakan parameter secara paksa dengan nilai r (cth., objek sementara yang tamat tempoh), menghalang operasi penyalinan.
    • Memerlukan pengisytiharan salinan yang jelas menggunakan std::move apabila pemanggil menginginkan salinan .
    • Melumpuhkan sebarang perubahan dalam nilai pulangan yang ditunjukkan dalam salinan pemanggil.

Perbezaan Utama

  • Salin Pemilikan: Nilai lulus mandat bahawa parameter mesti disalin, manakala rujukan nilai lulus membenarkan fungsi untuk memindahkan parameter, menghapuskan panggilan pembina langkah tambahan dalam beberapa kes.
  • Memilih Kaedah yang Betul
  • Gunakan nilai lulus apabila :

Fungsi ini memerlukan salinan atau versi diubah suai objek input.Objek input adalah kecil atau murah untuk disalin.

Gunakan pas dengan rujukan rnilai apabila:
  • Fungsi perlu mengambil pemilikan dan mengubah suai objek input.
  • Objek input adalah besar atau mahal untuk disalin.

Pemanggil tidak memerlukan salinan objek input.

    Atas ialah kandungan terperinci Bila Memilih Lulus Mengikut Nilai vs Lulus dengan Rujukan Rnilai dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    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