Kako posredovati argumente funkcijam v C++: po vrednosti ali po sklicu?

Kako Posredovati Argumente Funkcijam V C Po Vrednosti Ali Po Sklicu



Vsak programski jezik, vključno s C++, mora imeti možnost zagotavljanja parametrov funkcijam. Avtor: vrednost in po referenca sta dve glavni metodi, ki ju je mogoče uporabiti za posredovanje parametrov. Oba pristopa imata prednosti in slabosti, zato je ključnega pomena, da programerji vedo, kdaj uporabiti vsakega od njih.

1: Posredovanje argumentov po vrednosti

Kopija spremenljivke se naredi in zagotovi funkciji, ko argumenti se posredujejo po vrednosti . Vse spremembe spremenljivke znotraj funkcije vplivajo samo na kopijo; nič se ne spremeni v izvirno spremenljivko. Kot rezultat, mimo vrednosti je varna metoda, ker ni možnosti nenamernega spreminjanja vrednosti izvirne spremenljivke.

Prehajanje po vrednosti , pa je lahko neučinkovit, zlasti pri obravnavanju velikih ali zapletenih tipov podatkov. Vsak klic funkcije, ki zahteva kopijo podatkov, lahko hitro izčrpa CPE in pomnilniške vire. Poleg tega mimo vrednosti ni mogoče uporabiti za funkcije, katerih namen je spremeniti vrednost izvirne spremenljivke, ker kopija in izvirna spremenljivka nista povezani.







2: Posredovanje argumentov s sklicevanjem

Spremenljivke so lahko preneseno s sklicevanjem tudi v C++, kar pomaga rešiti te težave. Izvirna spremenljivka se pošlje funkciji, ko mimo sklicevanja , vse spremembe spremenljivke znotraj funkcije pa bodo vplivale tudi na izvirno spremenljivko. Zaradi tega, mimo sklicevanja je bistveno bolj učinkovit za velike ali zapletene vrste podatkov in se izogne ​​potrebi po kopiranju.



Da bi preprečili nenamerne spremembe, mora biti funkcija izrecno označena kot const. To boste dosegli z dodajanjem ključne besede const v deklaracijo funkcije, kot v »int izračun(const int& a, const int& b).



vendar podajanje argumentov s sklicevanjem zahteva tudi posebno pozornost do podrobnosti. Neizkušeni programerji lahko delajo napake, kot so ustvarjanje nenamernih stranskih učinkov, nenamerno deljenje podatkov in preglasitev zunanjih podatkov.





Razmislite o naslednji kodi, ki prikazuje oboje metode podajanja argumentov :

#include

uporaba imenskega prostora std ;

praznina PassByValue ( int x ) {

x = 5 ;

cout << 'Znotraj PassByValue: ' << x << konec ;

}

praznina PassByReference ( int & x ) {

x = 5 ;

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

}

int glavni ( ) {

int št.1 = 2 , št.2 = 2 ;

cout << 'Pred klici funkcije: num1= ' << št.1 << ' num2 = ' << št.2 << konec ;

PassByValue ( št.1 ) ;

PassByReference ( št.2 ) ;

cout << 'Po klicu funkcije: num1= ' << št.1 << ' num2 = ' << št.2 << konec ;

vrnitev 0 ;

}

V zgornji kodi je prva funkcija, PassByValue , prejme celoštevilski argument po vrednosti. Znotraj funkcije se ustvari nova celoštevilska spremenljivka, ki ji je dodeljena vrednost 5. Prvotno celo število ostane nespremenjeno. Druga funkcija, PassByReference , prejme celoštevilski argument s sklicevanjem. V tem primeru funkcija neposredno manipulira z izvirno spremenljivko.



Izhod

Kot je bilo pričakovano, prvi klic izda 5, vendar ne vpliva na izvirno spremenljivko. Nasprotno pa drugi klic spremeni vrednost num2 v 5, kar vpliva na izhod končnega stavka.

Prenos po vrednosti v primerjavi s prenosom po sklicu

1: Način klicanja funkcije

Ena razlika med mimo vrednosti in mimo sklicevanja tako se imenuje funkcija. Kdaj mimo vrednosti , mora klic funkcije vključevati vrednost spremenljivke, kot je `izračunaj(a, b)`. Kdaj mimo sklicevanja , mora klic funkcije vključevati pomnilniški naslov spremenljivke, označen z znakom ampersand, kot je `izračunaj(&a, &b)`.

2: Vrste podatkov

Na splošno, mimo vrednosti je najprimernejša pri delu z majhnimi ali preprostimi tipi podatkov ali kadar funkcija ni namenjena spreminjanju izvirne spremenljivke. Prehajanje s sklicevanjem je primernejša za velike ali zapletene vrste podatkov ali kadar je funkcija namenjena spreminjanju vrednosti izvirne spremenljivke.

Zaključek

Ko so parametri preneseno po vrednosti funkciji se ustvari in dostavi kopija spremenljivke. Avtor: mimo sklicevanja , se izvirna spremenljivka pošlje funkciji. V C++, posredovanje argumentov po vrednosti ali po sklicu je temeljni koncept. Izbira pravega pristopa je odvisna od posebnih okoliščin in jo je treba skrbno oceniti. Prednosti uporabe referenca lahko povzroči učinkovitejšo kodo, kljub skušnjavi, da bi uporabili lažjo mimo vrednosti metoda.