Hvordan sende argumenter til funksjoner i C++: etter verdi vs. etter referanse?

Hvordan Sende Argumenter Til Funksjoner I C Etter Verdi Vs Etter Referanse



Ethvert programmeringsspråk, inkludert C++, må ha muligheten til å gi parametere til funksjoner. Av verdi og av henvisning er de to hovedmetodene som kan brukes til å sende parametere. Begge tilnærmingene har fordeler og ulemper, så det er avgjørende for programmerere å vite når de skal bruke hver enkelt.

1: Passere argumenter etter verdi

En kopi av variabelen lages og leveres til funksjonen når argumenter sendes etter verdi . Alle endringer som gjøres i variabelen inne i funksjonen påvirker kun kopien; ingenting er endret til den opprinnelige variabelen. Som et resultat, går forbi verdi er en sikker metode fordi det ikke er mulig å utilsiktet endre verdien av den opprinnelige variabelen.

Går forbi verdi , kan imidlertid være ineffektiv, spesielt når du arbeider med store eller kompliserte datatyper. Hvert funksjonskall som krever en kopi av dataene kan raskt tømme CPU- og minneressurser. Dessuten, går forbi verdi kan ikke brukes for funksjoner som tar sikte på å endre verdien av den opprinnelige variabelen fordi kopien og den opprinnelige variabelen ikke er koblet sammen.







2: Bestå argumenter ved referanse

Variabler kan være vedtatt ved referanse i C++ også, noe som bidrar til å løse disse problemene. Den opprinnelige variabelen sendes til funksjonen når passerer ved referanse , og eventuelle modifikasjoner utført av variabelen inne i funksjonen vil også påvirke den opprinnelige variabelen. På grunn av dette, passerer ved referanse er vesentlig mer effektiv for store eller kompliserte datatyper og unngår behovet for kopiering.



For å forhindre utilsiktede endringer, må en funksjon eksplisitt angis som const. Ved å legge til nøkkelordet const til funksjonsdeklarasjonen, som i 'int calculate(const int& a, const int& b)', vil dette oppnås.



Derimot, sende argumenter ved referanse krever også nøye oppmerksomhet på detaljer. Uerfarne programmerere kan gjøre feil, som å skape utilsiktede bivirkninger, utilsiktet deling av data og overstyre eksterne data.





Tenk på følgende kode som demonstrerer begge deler metoder for å sende argumenter :

#include

bruker navneområde std ;

tomrom PassByValue ( int x ) {

x = 5 ;

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

}

tomrom PassByReference ( int & x ) {

x = 5 ;

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

}

int hoved- ( ) {

int nummer1 = 2 , nummer2 = 2 ;

cout << 'Før funksjonsanrop: num1=' << nummer1 << ' num2 = ' << nummer2 << endl ;

PassByValue ( nummer1 ) ;

PassByReference ( nummer2 ) ;

cout << 'Etter funksjonsanrop: num1=' << nummer1 << ' num2 = ' << nummer2 << endl ;

komme tilbake 0 ;

}

I koden ovenfor, den første funksjonen, PassByValue , mottar et heltallsargument etter verdi. Innenfor funksjonen opprettes en ny heltallsvariabel og tildeles verdien 5. Det opprinnelige heltallet forblir uendret. Den andre funksjonen, PassByReference , mottar et heltallsargument ved referanse. I dette tilfellet manipulerer funksjonen den opprinnelige variabelen direkte.



Produksjon

Som forventet gir det første anropet 5, men har ingen effekt på den opprinnelige variabelen. Derimot endrer det andre kallet verdien av num2 til 5, noe som påvirker utdataene til den endelige setningen.

Pass by Value vs Pass by Reference

1: Måte å kalle en funksjon

En forskjell mellom går forbi verdi og passerer ved referanse er hvordan funksjonen kalles. Når går forbi verdi , må funksjonskallet inkludere variabelens verdi, for eksempel «beregn(a, b)». Når passerer ved referanse , må funksjonskallet inkludere variabelens minneadresse, symbolisert med et og-tegn, for eksempel «beregn(&a, &b)».

2: Datatyper

Generelt, går forbi verdi er mest hensiktsmessig når du arbeider med små eller enkle datatyper, eller når funksjonen ikke er ment å endre den opprinnelige variabelen. Passerer ved referanse er mer passende for store eller komplekse datatyper, eller når funksjonen er ment å endre den opprinnelige variabelens verdi.

Konklusjon

Når parametere er gått etter verdi til en funksjon opprettes og leveres en kopi av variabelen. Av passerer ved referanse , sendes den opprinnelige variabelen til funksjonen. I C++, sende argumenter etter verdi eller ved referanse er et grunnleggende konsept. Å velge riktig tilnærming avhenger av de spesifikke omstendighetene og bør vurderes nøye. Fordelene ved å bruke henvisning tilnærming kan resultere i mer effektiv kode, til tross for fristelsen til å bruke den enklere går forbi verdi metode.