Afișarea Formatată Modernă de Tip Sigur cu std::print și std::println în C++23 în C++

Formatare C++23

Ghid complet pentru biblioteca <print> introdusă în C++23: înlocuirea modernă a std::cout și printf prin std::print și std::println, formatare sigură la compilare (compile-time type safety) și viteză extremă fără overhead de stream-uri.

Sintaxă
#include <print> | std::println("Salut, {}! Scor: {:.2f}", nume, scor);

Timp de peste trei decenii, dezvoltatorii C++ au fost prinși între două extreme nesatisfăcătoare pentru afișarea textului în consolă: printf (rapid, dar nesigur ca tipuri și vulnerabil la format-string attacks) și std::cout (sigur ca tipuri, dar extrem de lent din cauza overhead-ului iostream-urilor și greoi de formatat). Introdusă în C++23 prin header-ul <print>, perechea de funcții std::print și std::println combină sintaxa elegantă a lui Python/Rust cu verificarea tipurilor la compilare și viteza nativă directă către descriptorii de fișiere de sistem.

Afișare modernă cu std::print și std::println în C++23
#include <print>
#include <string>
#include <vector>

int main() {
    std::string utilizator = "Alexandru";
    double rataSucces = 98.7564;
    std::vector<int> valori = {10, 20, 30, 40};

    // 1. std::println adaugă automat caracterul newline (
) la final:
    std::println("Salutare, {}!", utilizator);

    // 2. Formatare numerică avansată (rotunjire la 2 zecimale, aliniere):
    std::println("Rata de succes: {:>8.2f}%", rataSucces);

    // 3. Afișarea directă a containerelor întregi fără bucle manuale:
    std::println("Valorile din vector: {}", valori);

    // 4. Afișare pe stream-ul de eroare standard (stderr):
    std::println(stderr, "Eroare critica: resursa indisponibila!");

    return 0;
}

De ce este std::print revoluționar?

  • Verificare la timpul compilării (Compile-Time Checked): Dacă șablonul conține {} dar nu transmiteți parametrul corespunzător, compilatorul generează o eroare de compilare imediată, prevenind erorile de runtime.
  • Performanță extremă: Scrie direct în descriptorii de fișiere din sistemul de operare (cum ar fi write() pe Linux sau WriteConsoleW() pe Windows cu suport complet Unicode UTF-8), ocolind sincronizarea lentă din std::ios_base::sync_with_stdio.