Argumenttien välittäminen funktioille C++:ssa: arvon mukaan vs. viittauksen mukaan?

Argumenttien Valittaminen Funktioille C Ssa Arvon Mukaan Vs Viittauksen Mukaan



Jokaisella ohjelmointikielellä, mukaan lukien C++, on oltava kyky tarjota parametreja funktioille. Tekijä: arvo ja viite ovat kaksi päämenetelmää, joita voidaan käyttää parametrien välittämiseen. Molemmilla lähestymistavoilla on etuja ja haittoja, joten ohjelmoijien on erittäin tärkeää tietää, milloin kutakin niistä kannattaa hyödyntää.

1: Argumenttien välittäminen arvon mukaan

Muuttujasta tehdään kopio ja toimitetaan funktiolle when argumentit välitetään arvon mukaan . Kaikki funktion sisällä olevaan muuttujaan tehdyt muutokset vaikuttavat vain kopioon; mitään ei ole muutettu alkuperäiseen muuttujaan. Tuloksena, arvon ohitse on turvallinen menetelmä, koska alkuperäisen muuttujan arvoa ei ole mahdollista muuttaa tahattomasti.

Arvon ohittaminen , voi kuitenkin olla tehoton, varsinkin kun käsitellään suuria tai monimutkaisia ​​tietotyyppejä. Jokainen toimintokutsu, joka vaatii kopion tiedoista, voi kuluttaa nopeasti suorittimen ja muistin resursseja. Lisäksi, arvon ohitse ei voida käyttää funktioille, joiden tarkoituksena on muuttaa alkuperäisen muuttujan arvoa, koska kopiota ja alkuperäistä muuttujaa ei ole linkitetty.







2: Argumenttien välittäminen viitteellä

Muuttujat voivat olla läpäissyt viittauksella myös C++:ssa, mikä auttaa ratkaisemaan nämä ongelmat. Alkuperäinen muuttuja lähetetään funktiolle when ohimennen viitteellä , ja kaikki funktion sisällä olevaan muuttujaan tehdyt muutokset vaikuttavat myös alkuperäiseen muuttujaan. Tämän takia, ohimennen viitteellä on huomattavasti tehokkaampi suurille tai monimutkaisille tietotyypeille ja välttää kopioimisen.



Ei-toivottujen muutosten estämiseksi funktio on nimettävä nimenomaisesti const. Lisäämällä const-avainsanan funktion määrittelyyn, kuten kohdassa 'int laskea(const int& a, const int& b),' saadaan tämä aikaan.



Kuitenkin, argumenttien välittäminen viitteellä vaatii myös huolellista huomiota yksityiskohtiin. Kokemattomat ohjelmoijat voivat tehdä virheitä, kuten luoda tahattomia sivuvaikutuksia, tahatonta tietojen jakamista ja ulkoisten tietojen ohittamista.





Harkitse seuraavaa koodia, joka osoittaa molemmat argumenttien välitystavat :

#include

käyttäen nimiavaruutta std ;

mitätön PassByValue ( int x ) {

x = 5 ;

cout << 'Inside PassByValue:' << x << endl ;

}

mitätön PassByReference ( int & x ) {

x = 5 ;

cout << 'Inside PassByReference:' << x << endl ;

}

int pää ( ) {

int numero1 = 2 , numero2 = 2 ;

cout << 'Ennen funktiokutsuja: num1=' << numero1 << ' numero2 = ' << numero2 << endl ;

PassByValue ( numero1 ) ;

PassByReference ( numero2 ) ;

cout << 'Funktion kutsujen jälkeen: num1=' << numero1 << ' numero2 = ' << numero2 << endl ;

palata 0 ;

}

Yllä olevan koodin ensimmäinen funktio, PassByValue , vastaanottaa kokonaislukuargumentin arvon mukaan. Funktiossa luodaan uusi kokonaislukumuuttuja ja sille annetaan arvo 5. Alkuperäinen kokonaisluku pysyy muuttamattomana. Toinen toiminto, PassByReference , vastaanottaa kokonaislukuargumentin viittauksella. Tässä tapauksessa funktio manipuloi suoraan alkuperäistä muuttujaa.



Lähtö

Kuten odotettiin, ensimmäinen kutsu tuottaa 5, mutta sillä ei ole vaikutusta alkuperäiseen muuttujaan. Sitä vastoin toinen kutsu muuttaa num2:n arvon 5:ksi, mikä vaikuttaa lopullisen lausekkeen ulostuloon.

Pass by Value vs. Pass by Reference

1: tapa kutsua funktio

Yksi ero arvon ohitse ja ohimennen viitteellä näin funktiota kutsutaan. Kun arvon ohitse , funktiokutsussa on oltava muuttujan arvo, kuten `calculate(a, b)`. Kun ohimennen viitteellä , funktiokutsussa on oltava muuttujan muistiosoite, jota symboloi et-merkki, kuten `calculate(&a, &b)`.

2: Tietotyypit

Yleisesti, arvon ohitse on sopivin käytettäessä pieniä tai yksinkertaisia ​​tietotyyppejä tai kun funktiota ei ole tarkoitettu muuttamaan alkuperäistä muuttujaa. Ohitus viitteellä sopii paremmin suurille tai monimutkaisille tietotyypeille tai kun funktion tarkoituksena on muuttaa alkuperäisen muuttujan arvoa.

Johtopäätös

Kun parametrit ovat ohitettu arvolla funktioon, muuttujan kopio luodaan ja toimitetaan. Tekijä: ohimennen viitteellä , alkuperäinen muuttuja lähetetään funktiolle. C++:ssa, argumenttien välittäminen arvon tai viittauksen mukaan on peruskäsite. Oikean lähestymistavan valinta riippuu erityisistä olosuhteista, ja se on arvioitava huolellisesti. Käytön edut viite lähestymistapa voi johtaa tehokkaampaan koodiin huolimatta kiusauksesta käyttää helpompaa arvon ohitse menetelmä.