Ce face std::endl
Pentru viteză, std::cout nu trimite fiecare caracter imediat: îl adună într-o zonă de memorie (buffer) și îl trimite în bucăți. A „goli bufferul” (flush) înseamnă a trimite acum tot ce s-a adunat.
std::endl face două lucruri: scrie '\n' și golește bufferul. std::flush doar golește bufferul, fără rând nou. Pe ecran, std::endl și '\n' arată la fel; diferența este doar momentul în care textul pleacă din program.
Golirea este utilă când vrei ca un mesaj să apară sigur înainte de o operație lungă (o bară de progres, un „Se încarcă…”). În rest, '\n' este preferat, pentru că este mai rapid.
Exemple
Exemplul 1: endl și ‘\n’ arată la fel
#include <iostream>
int main() {
std::cout << "Rândul 1" << std::endl;
std::cout << "Rândul 2\n";
std::cout << "Rândul 3" << '\n';
}
Rezultat
Rândul 1
Rândul 2
Rândul 3
Exemplul 2: Mesaj afișat înainte de o operație lungă
std::flush trimite „Se calculează…” înainte de buclă, fără să treacă pe rândul următor.
#include <iostream>
int main() {
std::cout << "Se calculează..." << std::flush;
long long suma = 0;
for (int i = 1; i <= 1'000'000; ++i) {
suma += i;
}
std::cout << " gata: " << suma << std::endl;
}
Rezultat
Se calculează... gata: 500000500000
Greșeli frecvente
- Folosești
std::endlîntr-o buclă care scrie mii de rânduri într-un fișier: fiecare golire costă, iar programul poate fi de câteva ori mai lent decât cu'\n'. - Scrii
std::endl()cu paranteze. Este o funcție care se trimite fluxului fără să o apelezi:std::cout << std::endl;.
Comenzi înrudite
std::cout: Afișează text și valori în consolă, cu operatorul <<.std::cerr: Scrie mesaje de eroare și de jurnal pe canalul de eroare, separat de ieșirea normală.std::println: Afișează text formatat cu acolade {} și trece pe rândul următor (C++23).