Ce face void
Cea mai des întâlnită folosire: tipul returnat al funcțiilor care fac ceva, dar nu calculează o valoare (afișează, salvează, modifică). Într-o funcție void poți scrie return; fără valoare, ca să ieși mai devreme.
void* este un pointer „generic”: ține o adresă, dar nu știe ce tip de date se află acolo. Trebuie transformat înapoi în tipul corect (cu static_cast) înainte de folosire. Este des întâlnit în bibliotecile C (malloc, memcpy); în C++ modern se folosesc rar.
Expresia (void)x; sau static_cast<void>(x) spune explicit „știu că nu folosesc valoarea”, ca să nu primești avertismente.
Exemple
Exemplul 1: Funcție care nu returnează nimic
#include <print>
#include <string>
void saluta(const std::string& nume) {
if (nume.empty()) {
std::println("Nu știu pe cine să salut.");
return; // ieșire devreme, fără valoare
}
std::println("Bună, {}!", nume);
}
int main() {
saluta("Ana");
saluta("");
}
Rezultat
Bună, Ana!
Nu știu pe cine să salut.
Exemplul 2: void* și transformarea înapoi
Funcția primește adresa ca void*, deci nu știe ce e acolo. Cel care o apelează știe că e un int și face conversia înapoi.
#include <print>
void afiseaza_int(void* date) {
int* numar = static_cast<int*>(date);
std::println("Valoarea: {}", *numar);
}
int main() {
int nota = 9;
afiseaza_int(¬a);
}
Rezultat
Valoarea: 9
Greșeli frecvente
- Încerci să citești printr-un
void*direct:*p. Nu se compilează, pentru că nu se știe ce tip are valoarea; transformă-l întâi în pointerul corect. - Folosești rezultatul unei funcții
void:int x = saluta("Ana");. Funcția nu returnează nimic, deci primești eroare de compilare.
Comenzi înrudite
return: Încheie funcția curentă și trimite, opțional, o valoare înapoi celui care a apelat-o.pointeri (*, &): Un pointer este o variabilă care ține adresa altei variabile; prin el poți citi și modifica valoarea de la acea adresă.static_cast, dynamic_cast, const_cast, reinterpret_cast: Cele patru conversii explicite: static_cast (obișnuite), dynamic_cast (clase), const_cast (const) și reinterpret_cast (biți).