Dalam C , terdapat dua cara biasa untuk hantar argumen kepada fungsi: mengikut nilai dan dengan rujukan berterusan. Walaupun kedua-dua kaedah mempunyai kelebihan mereka, ia tidak selalunya jelas apabila satu kaedah harus digunakan berbanding yang lain. Artikel ini bertujuan untuk menjelaskan konsep ini dan memberi panduan tentang memilih kaedah yang sesuai untuk situasi yang berbeza.
Pas- by-Value: Apabila argumen diluluskan oleh nilai, fungsi mencipta salinan tempatan objek yang diluluskan. Sebarang pengubahsuaian yang dibuat pada salinan tempatan ini dalam fungsi tidak menjejaskan objek asal. Apabila fungsi keluar, salinan setempat terkeluar dari skop dan dimusnahkan.
Pass-by-Const-Reference: Apabila hujah diluluskan oleh rujukan tetap, fungsi memperoleh rujukan kepada objek asal. Rujukan ini tidak boleh diubah suai, dan percubaan untuk berbuat demikian akan mengakibatkan ralat penyusunan. Oleh itu, objek mesti boleh diubah untuk rujukan pass-by-const berfungsi.
Faedah utama pass-by-const- rujukan ialah ia mengelak daripada menyalin objek hujah, yang boleh menjadi mahal dari segi pengiraan. Keuntungan prestasi ini amat ketara untuk objek besar atau kompleks.
Pengoptimuman Prestasi: Jika kos menyalin hujah adalah besar, lulus-by- const-reference harus digunakan.
Aliasing: Dalam sesetengah kes, pass-by-value menyediakan pilihan yang lebih selamat. Contohnya, jika hujah ialah objek yang boleh dialiaskan (iaitu, dikongsi) dengan objek lain, mengubah suai hujah melalui rujukan boleh menyebabkan akibat yang tidak diingini.
Semantik: Pass-by -rujukan membayangkan bahawa fungsi beroperasi pada objek asal, manakala nilai pas-demi-menyampaikan tanggapan salinan bebas. Perbezaan semantik yang halus ini mungkin membimbing pilihan apabila tingkah laku yang dimaksudkan adalah jelas.
Pertimbangkan fungsi berikut:
void set_value(int& value) { value = 10; }
Jika kita memberikan hujah integer kepada ini fungsi mengikut nilai, perubahan yang dibuat kepada salinan tempatan tidak akan menjejaskan integer asal. Walau bagaimanapun, jika kita lulus hujah dengan rujukan tetap, integer asal akan diubah suai. Pilihan antara dua kaedah ini bergantung kepada sama ada kita berhasrat untuk mengubah suai objek asal atau tidak.
Rujukan pass-by-const ialah teknik yang berkuasa untuk mengoptimumkan prestasi dan memastikan kod selamat apabila berurusan dengan objek boleh ubah. Walau bagaimanapun, keputusan antara rujukan pass-by-const dan pass-by-value harus dibuat dengan berhati-hati, dengan mengambil kira faktor seperti implikasi prestasi, alias dan semantik yang dimaksudkan bagi fungsi tersebut.
Atas ialah kandungan terperinci Rujukan Pass-by-Const vs. Pass-by-Value dalam C : Bilakah Saya Harus Pilih Yang Mana?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!