Com passar arguments a les funcions en C++: per valor vs. per referència?

Com Passar Arguments A Les Funcions En C Per Valor Vs Per Referencia



Qualsevol llenguatge de programació, inclòs C++, ha de tenir la capacitat de proporcionar paràmetres a les funcions. Per valor i per referència són els dos mètodes principals que es poden utilitzar per passar paràmetres. Tots dos enfocaments tenen avantatges i inconvenients, per la qual cosa és crucial que els programadors sàpiguen quan utilitzar-los.

1: Passar arguments per valor

Es fa una còpia de la variable i es proporciona a la funció quan els arguments es passen per valor . Totes les modificacions fetes a la variable dins de la funció només afecten la còpia; no es modifica res a la variable original. Com a resultat, passant per valor és un mètode segur perquè no hi ha possibilitat de modificar involuntàriament el valor de la variable original.

Passant per valor , però, pot ser ineficaç, especialment quan es tracta de tipus de dades grans o complicats. Cada trucada de funció que requereix una còpia de les dades pot esgotar ràpidament els recursos de memòria i CPU. A més, passant per valor no es pot utilitzar per a funcions que pretenen canviar el valor de la variable original perquè la còpia i la variable original no estan enllaçades.







2: Passar arguments per referència

Les variables poden ser passat per referència també en C++, que ajuda a resoldre aquests problemes. La variable original s'envia a la funció quan passant per referència , i qualsevol modificació realitzada a la variable dins de la funció també afectarà la variable original. A causa d'això, passant per referència és substancialment més eficaç per a tipus de dades grans o complicats i evita la necessitat de còpia.



Per evitar modificacions no desitjades, una funció s'ha de designar explícitament com a const. Afegiu la paraula clau const a la declaració de la funció, com a 'int calculate(const int& a, const int& b)', ho aconseguirà.



Malgrat això, passant arguments per referència també requereix una atenció acurada als detalls. Els programadors sense experiència poden cometre errors, com ara crear efectes secundaris no intencionats, compartir dades no desitjats i anul·lar dades externes.





Considereu el codi següent que demostra tots dos mètodes de pas d'arguments :

#inclou

utilitzant l'espai de noms std ;

buit PassByValue ( int x ) {

x = 5 ;

cout << 'Dins de PassByValue:' << x << endl ;

}

buit PassByReference ( int & x ) {

x = 5 ;

cout << 'Dins de PassByReference:' << x << endl ;

}

int principal ( ) {

int núm1 = 2 , num2 = 2 ;

cout << 'Abans de les trucades de funció: num1= ' << núm1 << ' num2 = ' << num2 << endl ;

PassByValue ( núm1 ) ;

PassByReference ( num2 ) ;

cout << 'Després de les trucades de funció: num1= ' << núm1 << ' num2 = ' << num2 << endl ;

tornar 0 ;

}

En el codi anterior, la primera funció, PassByValue , rep un argument enter per valor. Dins de la funció, es crea una nova variable entera i se li assigna el valor 5. L'enter original roman sense modificar-se. La segona funció, PassByReference , rep un argument enter per referència. En aquest cas, la funció manipula directament la variable original.



Sortida

Com era d'esperar, la primera crida produeix 5, però no té cap efecte sobre la variable original. En canvi, la segona crida canvia el valor de num2 a 5, la qual cosa afecta la sortida de la instrucció final.

Passa per valor vs. Passa per referència

1: Manera de trucar a una funció

Una diferència entre passant per valor i passant per referència és com s'anomena la funció. Quan passant per valor , la crida a la funció ha d'incloure el valor de la variable, com ara `calculate(a, b)`. Quan passant per referència , la crida a la funció ha d'incloure l'adreça de memòria de la variable, simbolitzada per un caràcter i comercial, com ara `calculate(&a, &b)`.

2: Tipus de dades

En general, passant per valor és més adequat quan es treballa amb tipus de dades petits o simples, o quan la funció no està pensada per modificar la variable original. Passant per referència és més adequat per a tipus de dades grans o complexos, o quan la funció pretén modificar el valor de la variable original.

Conclusió

Quan els paràmetres són passat per valor a una funció, es crea i es subministra una còpia de la variable. Per passant per referència , la variable original s'envia a la funció. En C++, passant arguments per valor o per referència és un concepte fonamental. L'elecció de l'enfocament adequat depèn de les circumstàncies específiques i s'ha d'avaluar acuradament. Els avantatges d'utilitzar el referència L'enfocament pot donar lloc a un codi més eficaç, malgrat la temptació d'utilitzar el més fàcil passant per valor mètode.