Bilakah Anda Harus Menggunakan Rujukan Pass By Value vs Pass By Rvalue?

DDD
Lepaskan: 2024-10-24 02:02:30
asal
636 orang telah melayarinya

When Should You Use Pass By Value vs Pass By Rvalue Reference?

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!

sumber:php
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
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!