Memahami Hantaran Parameter dalam C
Apabila menghantar parameter dalam C , memilih kaedah yang sesuai (mengikut nilai, rujukan atau rujukan nilai) memastikan kecekapan dan kejelasan dalam reka bentuk kod . Berikut ialah amalan terbaik untuk setiap senario:
1. Rujukan Lvalue Pass by:
- Apabila parameter perlu diubah suai dan pengubahsuaian ini perlu dilihat kepada pemanggil.
- Contoh: void foo(my_class& obj) membenarkan pengubahsuaian dalam fungsi untuk mencerminkan perubahan dalam asal objek.
2. Lulus Rujukan Nilai L kepada Const:
- Apabila keadaan parameter hanya perlu dipatuhi, tanpa sebarang pengubahsuaian yang diperlukan.
- Contoh: void foo(my_class const& obj) membenarkan akses kepada data objek tanpa mengubahnya negeri.
3. Pass by Value:
- Untuk jenis asas (cth., int, bool) atau jenis dengan penyalinan pantas, pendekatan ini mengutamakan kecekapan.
- Contoh: void foo(my_class obj ) memastikan salinan atau pemindahan berlaku, bergantung pada sama ada nilai atau nilai adalah lulus.
4. Pertimbangkan Melebihi Pemuatan untuk Nilai L dan Nilai R:
- Untuk objek dengan pergerakan yang mahal, sediakan lebihan beban berasingan untuk mengendalikan nilai l dan nilai.
- Contoh: Lebihan foo() dengan my_class& dan kelas_saya&& untuk mengendalikan senario rujukan lnilai dan rujukan rnilai.
5. Gunakan Pemajuan Sempurna:
- Buat templat fungsi yang menerima rujukan rnilai kepada jenis yang tidak ditentukan dan majukannya dengan std::forward.
- Contoh: templat
Mengenai Kod yang Diberikan:
Meluluskan Kad Kredit sebagai Rnilai Rujukan:
- Tuntutan dua langkah dan sifar salinan adalah tidak betul.
- Apabila melepasi nilai Kad Kredit, hanya satu pergerakan berlaku semasa pengikatan rujukan.
Melebihi beban untuk Pembina:
- Pertimbangkan untuk membuat lebihan pembina yang berasingan untuk rujukan nilai kepada CreditCard dan rujukan nilai kepada CreditCard.
- Pendekatan ini menjamin salinan untuk nilai dan langkah untuk nilai, meningkatkan kecekapan dan memenuhi keperluan khusus.
Atas ialah kandungan terperinci Bagaimana Saya Harus Memilih Antara Melepasi Nilai, Rujukan dan Rujukan Rvalue dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!