Ce face typedef
typedef dă un al doilea nume unui tip: după typedef unsigned long long Contor;, poți scrie Contor în loc de unsigned long long. Nu se creează un tip nou, doar un nume.
Ordinea este „tipul vechi, apoi numele nou”, ca la o declarație de variabilă. La pointerii la funcții sintaxa devine greu de citit, motiv pentru care în C++ modern se preferă using NumeNou = Tip;.
Vei întâlni des typedef în cod vechi și în bibliotecile C (de exemplu typedef struct { ... } Punct;).
Exemple
Exemplul 1: Alias pentru un tip lung
#include <print>
typedef unsigned long long Contor;
int main() {
Contor vizitatori = 1'250'000;
vizitatori += 1;
std::println("Vizitatori: {}", vizitatori);
}
Rezultat
Vizitatori: 1250001
Exemplul 2: typedef față de using pentru un pointer la funcție
Ambele linii declară același tip: pointer la o funcție care primește un double și returnează un double. Varianta cu using se citește de la stânga la dreapta.
#include <print>
double cu_tva(double pret) { return pret * 1.21; }
typedef double (*Calcul)(double);
using CalculNou = double (*)(double);
int main() {
Calcul f = cu_tva;
CalculNou g = cu_tva;
std::println("{:.2f} {:.2f}", f(50), g(50));
}
Rezultat
60.50 60.50
Greșeli frecvente
- Inversezi ordinea:
typedef Contor unsigned long;. Corect este tipul existent întâi, apoi numele nou. - Încerci să faci un alias de șablon cu
typedef. Nu se poate; pentrutemplate <typename T> using Lista = std::vector<T>;ai nevoie deusing.
Comenzi înrudite
using: Aduce nume dintr-un spațiu de nume în locul curent sau creează un nume nou (alias) pentru un tip existent.struct: Grupează mai multe valori într-un singur tip; ca o clasă, dar cu membri publici implicit.pointeri (*, &): Un pointer este o variabilă care ține adresa altei variabile; prin el poți citi și modifica valoarea de la acea adresă.