std::print în C++

Afișează text formatat cu acolade {}, fără rând nou la final (C++23).

Sintaxă
#include <print>
std::print(sablon, valori...);
std::print(stderr, sablon, valori...);

Ce face std::print

std::print afișează un șablon în care fiecare {} este înlocuit, în ordine, cu următoarea valoare. Formatarea este aceeași ca la std::format: {:.2f} pentru două zecimale, {:>8} pentru aliniere la dreapta etc.

Spre deosebire de std::println, nu adaugă rând nou la final; dacă vrei unul, îl scrii tu cu \n. Este util când construiești un rând din mai multe bucăți.

Ca prim argument poți da un FILE*: std::print(stderr, ...) scrie pe ieșirea de eroare. Șablonul este verificat la compilare: o acoladă greșită sau un format nepotrivit cu tipul valorii dă eroare de compilare, nu de rulare.

Parametri

Parametru Descriere
sablon Textul cu marcaje {}. Pentru o acoladă propriu-zisă scrii {{ sau }}. Trebuie să fie cunoscut la compilare.
valori... Valorile care înlocuiesc marcajele, în ordine.

Ce returnează

Nimic.

Exemple

Exemplul 1: Un rând construit din mai multe bucăți

#include <print>

int main() {
    int note[] = {9, 7, 10, 8};
    std::print("Note:");
    for (int n : note) {
        std::print(" {}", n);
    }
    std::print("\n");
    std::print("{} are {} ani și locuiește în {}.\n", "Ana", 21, "Iași");
}

Rezultat

Note: 9 7 10 8
Ana are 21 ani și locuiește în Iași.

Exemplul 2: Zecimale, aliniere și ordinea argumentelor

{0} și {1} aleg argumentul după poziție, așa că o valoare poate fi folosită de mai multe ori.

#include <print>

int main() {
    double pret = 1299.5;
    std::print("Preț: {:.2f} lei\n", pret);
    std::print("[{:>8}] [{:<8}] [{:^8}]\n", "dreapta", "stânga", "centru");
    std::print("{0} + {0} = {1}\n", 7, 14);
}

Rezultat

Preț: 1299.50 lei
[ dreapta] [stânga  ] [ centru ]
7 + 7 = 14

Greșeli frecvente

  • Te aștepți la rând nou: std::print nu adaugă \n. Folosește std::println sau scrie \n în șablon.
  • Construiești șablonul la rulare (de exemplu dintr-o variabilă std::string): nu compilează, pentru că șablonul trebuie verificat la compilare. Pentru șabloane dinamice folosești std::vformat.
  • Compilatorul sau biblioteca standard sunt prea vechi: <print> cere C++23 (-std=c++23).

Comenzi înrudite

  • std::println: Afișează text formatat cu acolade {} și trece pe rândul următor (C++23).
  • std::format: Construiește un std::string dintr-un șablon cu acolade {} și valori (C++20).
  • std::cout: Afișează text și valori în consolă, cu operatorul <<.
  • std::printf: Afișează text formatat în stil C, cu marcaje precum %d, %s, %.2f.