std::endl în C++

Trece pe rândul următor și golește bufferul; std::flush doar golește bufferul.

Sintaxă
std::cout << std::endl;   // '\n' + golire buffer
std::cout << std::flush;  // doar golire buffer

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).