std::println în C++

Afișează text formatat cu acolade {} și trece pe rândul următor (C++23).

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

Ce face std::println

std::println este varianta modernă a lui std::cout << ... << '\n': primește un șablon cu marcaje {}, le înlocuiește cu valorile date și adaugă un rând nou la final.

Marcajele pot avea specificații după două puncte: {:.2f} (două zecimale), {:5} (lățime 5), {:<10} / {:>10} / {:^10} (aliniere), {:x} (hexazecimal), {:+} (semn). Sunt aceleași reguli ca la std::format.

În C++23 poate afișa direct și containere: un std::vector apare ca [1, 2, 3], iar un std::map ca {"a": 1}. Textul UTF-8 cu diacritice se afișează corect.

Parametri

Parametru Descriere
sablon Textul cu marcaje {}, cunoscut la compilare.
valori... Valorile care înlocuiesc marcajele, în ordine.

Ce returnează

Nimic.

Exemple

Exemplul 1: Afișare simplă

#include <print>
#include <string>

int main() {
    std::string oras = "Brașov";
    int locuitori = 237'589;
    std::println("Salut, lume!");
    std::println("{} are {} de locuitori.", oras, locuitori);
}

Rezultat

Salut, lume!
Brașov are 237589 de locuitori.

Exemplul 2: Un mic tabel cu prețuri

{:<10} aliniază la stânga pe 10 coloane, iar {:>8.2f} aliniază la dreapta un număr cu 2 zecimale pe 8 coloane.

#include <print>

int main() {
    std::println("{:<10}{:>8}", "Produs", "Preț");
    std::println("{:<10}{:>8.2f}", "Pâine", 4.5);
    std::println("{:<10}{:>8.2f}", "Lapte", 7.99);
    std::println("{:<10}{:>8.2f}", "Cafea", 32.0);
}

Rezultat

Produs        Preț
Pâine         4.50
Lapte         7.99
Cafea        32.00

Exemplul 3: Afișarea directă a containerelor

Din C++23, vectorii, perechile și dicționarele au un format implicit.

#include <map>
#include <print>
#include <string>
#include <vector>

int main() {
    std::vector<int> note = {9, 7, 10};
    std::map<std::string, int> stoc = {{"mere", 12}, {"pere", 5}};
    std::println("Note: {}", note);
    std::println("Stoc: {}", stoc);
}

Rezultat

Note: [9, 7, 10]
Stoc: {"mere": 12, "pere": 5}

Greșeli frecvente

  • Numărul de marcaje nu corespunde cu numărul de valori: dacă sunt mai puține valori decât {}, programul nu compilează.
  • Scrii acolade în text fără să le dublezi: std::println("{x}") nu compilează. Pentru o acoladă propriu-zisă scrii {{ și }}.
  • Pui \n la final din obișnuință și obții un rând gol în plus: println adaugă deja rândul nou.

Comenzi înrudite

  • std::print: Afișează text formatat cu acolade {}, fără rând nou la final (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::setw: Stabilește lățimea minimă a următoarei valori, cu aliniere și caracter de umplere.