Lecții din modul (2/2)
Treci prin valoare și referință
În C++, când treceți un argument unei funcții, există două moduri principale de a face acest lucru: prin valoare sau prin referință.
Înțelegerea acestei distincții este cheia atât pentru corectitudinea programului, cât și pentru optimizarea performanței.
Trecere după valoare (Copiere)
În mod implicit, C++ transmite argumente după valoare. Aceasta înseamnă că o copie a datelor este creată în memorie. Orice modificare făcută în interiorul funcției nu va afecta variabila originală din exterior:
#include <iostream>
void increment(int n) {
n++; // Modifies only the local copy
}
int main() {
int x = 5;
increment(x);
std::cout << x << std::endl; // Prints 5, x remains unchanged!
return 0;
}Treci prin referință (&)
Dacă doriți ca funcția să poată modifica variabila originală sau dacă doriți să evitați copierea obiectelor mari (cum ar fi șiruri lungi sau vectori), trebuie să utilizați pass by reference.
O referință este declarată prin adăugarea simbolului & după tipul parametrului:
#include <iostream>
void incrementRef(int& n) {
n++; // Modifies the original variable directly
}
int main() {
int x = 5;
incrementRef(x);
std::cout << x << std::endl; // Prints 6!
return 0;
}Parametrul int& n nu este o copie, ci un alias (o referință directă) la variabila x transmisă la apelarea funcției.
Încercați-l singur
Definiți o funcție numită doubleNumber cu un tip de returnare void care ia o referință la un întreg n (folosind int& n) și își dublează valoarea (n = n * 2). Apelați-o în principal trecând variabila val inițializată la 10, apoi imprimați val.
Afișează indiciu
Semnătura funcției folosește caracterul `&` după tip pentru a indica o referință:`void doubleNumber(int& n)`.
Soluție disponibilă după 3 încercări
Definiți o funcție numită swap care preia două referințe întregi a și b (int& a, int& b) și schimbă valorile lor folosind o variabilă temporară temp. Apelați-l în principal pentru a schimba x și y, apoi imprimați-le.
Afișează indiciu
Utilizați `int temp = a; a = b; b = temp;` pentru a schimba valorile.
Soluție disponibilă după 3 încercări