Lulus Mengikut Nilai vs Lulus Rujukan Nilai R
Bila Mengisytiharkan:
Dalam situasi di mana fungsi memerlukan pemilikan parameter yang diluluskan, mengisytiharkan fungsi sebagai:
- void foo(Widget w); melepasi nilai, memerlukan penyalinan tersirat bagi hujah yang diluluskan.
- void foo(Widget&& w); melepasi rujukan rnilai, membenarkan pergerakan eksplisit bagi hujah yang diluluskan.
Perbezaan Utama:
1. Kawalan Salinan:
- Nilai lulus: Penyalinan tersirat berlaku, berpotensi memperkenalkan kos tambahan.
- Rujukan nilai lulus: Pergerakan eksplisit diperlukan untuk pembinaan salinan, memaksa pemanggil untuk menguruskan salinan.
2. Semantik Antara Muka:
- Parameter nilai: Fungsi ini menandakan bahawa ia mahukan salinan parameter untuk beroperasi.
- Parameter rujukan nilai: Fungsi berhasrat untuk mengambil pemilikan hujah dan boleh membuat pengubahsuaian.
3. Kecekapan:
- Nilai lulus: Boleh menghapuskan panggilan pembina satu langkah.
- Rujukan nilai lulus: Pengoptimuman pengkompil boleh menghapuskan salinan atau pergerakan pada bahagian pemanggil.
- Walau bagaimanapun, peningkatan kecekapan mungkin boleh diabaikan apabila parameter yang diluluskan tidak mempunyai ahli yang besar atau mahal.
Implikasi Antara Muka:
Rvalue parameter rujukan menyampaikan niat berikut:
- Fungsi menuntut pemilikan nilai yang diluluskan.
- Fungsi boleh mengubah suai nilai yang diluluskan tanpa menjejaskan rujukan pemanggil.
- Pemanggil melepaskan semua pemilikan dan tanggungjawab untuk nilai yang diluluskan.
Sebaliknya, parameter nilai menunjukkan bahawa:
- Fungsi beroperasi pada salinan nilai yang diluluskan.
- Pemanggil mengekalkan pemilikan nilai yang diluluskan dan sebarang perubahan yang dibuat oleh fungsi tidak menjejaskannya.
Atas ialah kandungan terperinci Bilakah Anda Harus Menggunakan Rujukan Pass By Value vs Pass By Rvalue?. 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