Rumah > pembangunan bahagian belakang > C++ > Bagaimana Memilih Mekanisme Lulus Parameter yang Betul dalam C ?

Bagaimana Memilih Mekanisme Lulus Parameter yang Betul dalam C ?

Susan Sarandon
Lepaskan: 2024-11-24 19:17:17
asal
763 orang telah melayarinya

How to Choose the Right Parameter Passing Mechanism in C  ?

Cara Melepasi Parameter Dengan Betul

Memahami Mekanisme Lulus

Melalui Nilai: Mencipta salinan baharu hujah; yang asal kekal tidak berubah.
Melalui nilai Rujukan: Mengubah suai objek asal; memerlukan identiti (lvalue) yang stabil.
Melalui nilai Rujukan kepada Const: Memerhati objek asal tanpa mengubah suainya; menerima kedua-dua nilai l dan nilai r.
Melalui nilai Rujukan: Mengikat nilai r (sementara atau bergerak-daripada objek); boleh melakukan operasi bergerak.

Amalan Terbaik

Gunakan Rujukan lvalue untuk Pengubahsuaian:
Apabila fungsi perlu mengubah suai objek asal, lalui rujukan lvalue (& ).

Gunakan Rujukan lnilai kepada Const untuk Pemerhatian:
Untuk fungsi yang hanya memerhatikan keadaan objek, lalukan rujukan lvalue kepada const (const &).

Pertimbangkan Passing by Value untuk Jenis Bukan Intensif Salin :
Jika salinan adalah murah (cth., integer, aksara), pertimbangkan untuk lewat nilai.

Lebihan beban untuk Nilai L dan Rnilai (jika perlu):
Buat lebihan beban berasingan jika perpindahan mahal terlibat dan anda ingin mengelakkan perpindahan daripada nilai l.

Gunakan Pemajuan Sempurna untuk Pengendalian Generik:
Gunakan templat fungsi dan std::forward untuk menentukan secara automatik sama ada hendak menyalin atau memindahkan berdasarkan jenis argumen (rvalue/lvalue).

Analisis Contoh

Kelas Kad Kredit: Pertimbangkan untuk membebankan pembina secara berlebihan dengan dua versi:

CreditCard(CreditCard const& other); // lvalue reference to copy
CreditCard(CreditCard&& other); // rvalue reference to move
Salin selepas log masuk

Kelas Akaun dengan Kad Kredit Ahli:
Gunakan salah satu daripada pembina berikut berdasarkan gelagat yang diingini:

Account(std::string number, float amount, CreditCard const& creditCard); // Copy
Account(std::string number, float amount, CreditCard&& creditCard); // Move
Salin selepas log masuk

Kelas Akaun dengan Vektor Ahli Akaun:
Lulus melalui rujukan atau rujukan const, bergantung pada sama ada pengubahsuaian dijangkakan.

Client(std::string firstName, std::string lastName, std::vector<Account> accounts); // Reference for modification
Client(std::string firstName, std::string lastName, std::vector<const Account> accounts); // Reference to const for observation
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana Memilih Mekanisme Lulus Parameter yang Betul 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