return în C++

Încheie funcția curentă și trimite, opțional, o valoare înapoi celui care a apelat-o.

Sintaxă
return expresie;   // într-o funcție care returnează o valoare
return;            // într-o funcție void

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 return pe 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.