Bagaimana untuk Meluluskan Argumen kepada Fungsi dalam C++: Mengikut Nilai vs. Mengikut Rujukan?

Bagaimana Untuk Meluluskan Argumen Kepada Fungsi Dalam C Mengikut Nilai Vs Mengikut Rujukan



Mana-mana bahasa pengaturcaraan, termasuk C++, mesti mempunyai keupayaan untuk menyediakan parameter kepada fungsi. Oleh nilai dan oleh rujukan adalah dua kaedah utama yang boleh digunakan untuk lulus parameter. Kedua-dua pendekatan mempunyai faedah dan kelemahan, jadi amat penting bagi pengaturcara untuk mengetahui masa untuk menggunakan setiap satu.

1: Melepasi Hujah mengikut Nilai

Salinan pembolehubah dibuat dan diberikan kepada fungsi apabila hujah diluluskan oleh nilai . Semua pengubahsuaian yang dibuat kepada pembolehubah di dalam fungsi hanya menjejaskan salinan; tiada apa yang diubah kepada pembolehubah asal. Akibatnya, melepasi nilai adalah kaedah selamat kerana tidak ada kemungkinan mengubah suai nilai pembolehubah asal secara tidak sengaja.

Melepasi nilai , bagaimanapun, mungkin tidak berkesan, terutamanya apabila berurusan dengan jenis data yang besar atau rumit. Setiap panggilan fungsi yang memerlukan salinan data boleh menghabiskan sumber CPU dan memori dengan cepat. Tambahan pula, melepasi nilai tidak boleh digunakan untuk fungsi yang bertujuan untuk menukar nilai pembolehubah asal kerana salinan dan pembolehubah asal tidak dipautkan.







2: Melepasi Hujah dengan Rujukan

Pembolehubah boleh diluluskan dengan rujukan dalam C++ juga, yang membantu menyelesaikan masalah ini. Pembolehubah asal dihantar ke fungsi apabila melalui rujukan , dan sebarang pengubahsuaian yang dilakukan kepada pembolehubah di dalam fungsi juga akan mempengaruhi pembolehubah asal. Disebabkan ini, melalui rujukan adalah jauh lebih berkesan untuk jenis data yang besar atau rumit dan mengelakkan keperluan untuk menyalin.



Untuk mengelakkan pengubahsuaian yang tidak diingini, fungsi mesti ditetapkan secara eksplisit sebagai const. Menambah kata kunci const pada pengisytiharan fungsi, seperti dalam 'int count(const int& a, const int& b),' akan mencapai ini.



Walau bagaimanapun, meluluskan hujah dengan rujukan memerlukan perhatian yang teliti terhadap perincian juga. Pengaturcara yang tidak berpengalaman boleh membuat kesilapan, seperti mencipta kesan sampingan yang tidak disengajakan, perkongsian data yang tidak disengajakan dan mengatasi data luaran.





Pertimbangkan kod berikut yang menunjukkan kedua-duanya kaedah lulus hujah :

#include

menggunakan ruang nama std ;

batal PassByValue ( int x ) {

x = 5 ;

cout << 'Di dalam PassByValue: ' << x << endl ;

}

batal PassByReference ( int & x ) {

x = 5 ;

cout << 'Di dalam PassByReference: ' << x << endl ;

}

int utama ( ) {

int nombor1 = 2 , nombor2 = 2 ;

cout << 'Sebelum panggilan fungsi: num1=' << nombor1 << 'bilangan2=' << nombor2 << endl ;

PassByValue ( nombor1 ) ;

PassByReference ( nombor2 ) ;

cout << 'Selepas panggilan fungsi: num1=' << nombor1 << 'bilangan2=' << nombor2 << endl ;

kembali 0 ;

}

Dalam kod di atas, fungsi pertama, PassByValue , menerima hujah integer mengikut nilai. Dalam fungsi, pembolehubah integer baharu dicipta dan diberikan nilai 5. Integer asal kekal tidak diubah suai. Fungsi kedua, PassByReference , menerima hujah integer melalui rujukan. Dalam kes ini, fungsi secara langsung memanipulasi pembolehubah asal.



Pengeluaran

Seperti yang dijangkakan, panggilan pertama mengeluarkan 5, tetapi tidak mempunyai kesan ke atas pembolehubah asal. Sebaliknya, panggilan kedua mengubah nilai num2 kepada 5, yang mempengaruhi output pernyataan akhir.

Lulus Mengikut Nilai lwn Lulus Rujukan

1: Cara untuk Memanggil Fungsi

Satu perbezaan antara melepasi nilai dan melalui rujukan ialah bagaimana fungsi itu dipanggil. Bila melepasi nilai , panggilan fungsi mesti termasuk nilai pembolehubah, seperti `kira(a, b)`. Bila melalui rujukan , panggilan fungsi mesti termasuk alamat memori pembolehubah, dilambangkan dengan aksara ampersand, seperti `kira(&a, &b)`.

2: Jenis Data

Secara umum, melepasi nilai adalah paling sesuai apabila bekerja dengan jenis data yang kecil atau ringkas, atau apabila fungsi itu tidak bertujuan untuk mengubah suai pembolehubah asal. Melewati rujukan adalah lebih sesuai untuk jenis data yang besar atau kompleks, atau apabila fungsi itu bertujuan untuk mengubah suai nilai pembolehubah asal.

Kesimpulan

Apabila parameter adalah diluluskan oleh nilai kepada fungsi, salinan pembolehubah dibuat dan dibekalkan. Oleh melalui rujukan , pembolehubah asal dihantar ke fungsi. Dalam C++, menghantar hujah mengikut nilai atau rujukan adalah konsep asas. Memilih pendekatan yang betul bergantung pada keadaan tertentu dan harus dinilai dengan teliti. Faedah menggunakan rujukan pendekatan boleh menghasilkan kod yang lebih berkesan, walaupun godaan untuk menggunakan lebih mudah melepasi nilai kaedah.