Ce face return
return oprește imediat execuția funcției. Într-o funcție care declară un tip returnat (int, double, std::string…), return trebuie urmat de o valoare de acel tip (sau convertibilă în el). Într-o funcție void se scrie doar return;, pentru a ieși mai devreme.
O funcție poate avea mai multe return; se execută primul la care ajunge. Tehnica „ieșirii devreme” (verifici cazurile speciale la început și ieși) face codul mai ușor de citit.
Pentru a returna mai multe valori, întoarce o struct, un std::pair sau un std::tuple. Returnarea obiectelor mari prin valoare este rapidă: compilatorul evită copia (RVO) sau mută obiectul.
Exemple
Exemplul 1: Valoare returnată și ieșire devreme
#include <print>
double pret_bilet(int varsta) {
if (varsta < 7) {
return 0; // copiii mici intră gratuit
}
if (varsta >= 65) {
return 15; // pensionari
}
return 30; // preț întreg
}
int main() {
std::println("5 ani: {} lei", pret_bilet(5));
std::println("30 ani: {} lei", pret_bilet(30));
std::println("70 ani: {} lei", pret_bilet(70));
}
Rezultat
5 ani: 0 lei
30 ani: 30 lei
70 ani: 15 lei
Exemplul 2: Mai multe valori returnate printr-o structură
#include <print>
#include <vector>
struct Statistici {
int minim;
int maxim;
double media;
};
Statistici calculeaza(const std::vector<int>& note) {
int mn = note[0], mx = note[0], suma = 0;
for (int n : note) {
if (n < mn) mn = n;
if (n > mx) mx = n;
suma += n;
}
return {mn, mx, static_cast<double>(suma) / note.size()};
}
int main() {
auto [mn, mx, media] = calculeaza({8, 10, 6, 9});
std::println("Minim {}, maxim {}, media {}", mn, mx, media);
}
Rezultat
Minim 6, maxim 10, media 8.25
Greșeli frecvente
- Uiți
returnpe o ramură a unei funcții care returnează o valoare. Dacă execuția ajunge la final fărăreturn, comportamentul este nedefinit (excepție:main). Compilatorul avertizează cu-Wreturn-type. - Returnezi o referință sau un pointer la o variabilă locală (
int& f() { int x = 5; return x; }). Variabila dispare la ieșirea din funcție, iar referința rămâne „atârnată”. - Scrii cod după
returnîn același bloc. Nu se execută niciodată.
Comenzi înrudite
void: Înseamnă „niciun tip”: o funcție void nu returnează nimic, iar void* este un pointer către date de orice tip.main: Funcția cu care începe orice program C++: sistemul o apelează la pornire, iar valoarea returnată spune dacă programul a reușit.break, continue: break oprește imediat bucla sau switch-ul curent; continue sare peste restul pasului curent și trece la următorul.structured bindings (auto [a, b]): Desface o pereche, un tuplu, o structură sau un tablou în variabile separate, cu nume, într-o singură declarație.