Clique sobre os tópicos listados abaixo para navegar até o conteúdo desejado.

  1. format
  2. Argumentos posicionados
  3. Tamanho de campo e preechimento
  4. Alinhamento
  5. Precisão
  6. Datahora
  7. moeda
  8. std::print
  9. placeholder aninhado

A partir do C++ 20, podemos utilizar a função format da biblioteca <format> para formatar valores em strings. Essa função aceita placeholders ({}) para conversão dos dados para string.

Sintaxe
#include <format>
Sintaxe
std::string format(string_placeholder, v1, v2, vN);
Onde
string_placeholder: string contendo placeholders
v1..N: valores para interpolação
Exemplo 1
#include <format>
#include <iostream>

using namespace std;

float funcao()
{
    return 1.23;    
}

int main()
{
  cout << format("{} - {} - {}", 5,"string",funcao() );
}
Saída
5 - string - 1.23

Os argumentos ou valores passados para a função format podem ser posicionados de acordo como seus índices que são informados nos placeholders como pode ser visto no exemplo abaixo:

Sintaxe
format("{0} {1} {N}", v1, v2, vN);
Exemplo 2
#include <format>
#include <iostream>

using namespace std;

float funcao()
{
    return 1.23;    
}

int main()
{
  cout << format("{} - {} - {}", 5,"string",funcao() ) <<endl;
  cout << format("{2} - {0} - {1}", 5,"string",funcao() );
}
Saída
5 - string - 1.23
1.23 - 5 - string

Dentro dos placeholders é possíve definir também um tamanho de campo e um caractere de preenchimento para os argumentos passados para a função format.

Sintaxe
{i:pc}
Onde
p: caractere para preenchimento
c: tamanho do campo
i: índice
: separador índice-formatação
Exemplo 3
#include <format>
#include <iostream>

using namespace std;

int main()
{
  cout << format("{:16}", 777) <<endl; //tamanho do campo
  cout << format("{:016}", 777) <<<endl; //preenchimento com 0
}
Saída
             777
0000000000000777

Podemos também justificar um valor informado em um placeholder para que fique à direita, esquerda ou centro. A sintaxe abaixo mostra como informar o alinhamento:

Sintaxe
{i:p^c}: centro
{i:p>c}: direita
{i:p<c}: esquerda
Onde
p: caractere para preenchimento
c: tamanho do campo
i: índice
: separador índice-formatação
Exemplo 4
#include <format>
#include <iostream>
using namespace std;

int main()
{
  cout << format("{:^16}", 777) <<endl; //centro
  cout << format("{:<16}", 777) <<<ndl; //direita
  cout << format("{:>16}", 777) <<<ndl; //esquerda
}
Saída
      777       
777             
             777
Exemplo 5
#include 
#include 
using namespace std;

int main()
{
  cout << format("{:*^16}", 777) <<endl; //centro
  cout << format("{:*<16}", 777) <<endl; //direita
  cout << format("{:*>16}", 777) <<endl; //esquerda
}
Saída
******777*******
777*************
*************777

Valores ponto-flutuante podem ser formatados e também ter suas casas decimais limitadas na exibição de valores float ou double como pode ser visto na sintaxe a seguir.

Sintaxe
{i:pjc.d}
Onde
i: índice
p: preenchimento
j: alinhamento
d: casas decimais
c: tamanho do campo
: separador índice-formatação
Exemplo 6: d
#include <format>
#include <iostream>
using namespace std;

int main()
{
  cout << format("{:.1}", 1.1234) <<endl; //1 casa
  cout << format("{:.2}", 1.1234) <<endl; //2 casas
  cout << format("{:.3}", 1.1234) <<endl; //3 casas
}
Saída
1.1
1.12
1.123
Exemplo 7: c.d
#include <format>
#include <iostream>
using namespace std;

int main()
{
  cout << format("{:12.1}", 1.1234) <<endl; //centro
  cout << format("{:12.2}", 1.1234) <<endl; //direita
  cout << format("{:12.3}", 1.1234) <<endl; //direita
}
Saída
           1
         1.1
        1.12
Exemplo 8: cp.d
#include <format>
#include <iostream>
using namespace std;

int main()
{
  cout << format("{:>12.1}", 1.1234) <<endl; //centro
  cout << format("{:<12.2}", 1.1234) <<endl; //direita
  cout << format("{:^12.3}", 1.1234) <<endl; //direita
}
Saída
           1
1.1         
    1.12   
Exemplo 9: pcj.d
#include <format>
#include <iostream>
using namespace std;

int main()
{
  cout << format("{:>12.1}", 1.1234) <<endl; //centro
  cout << format("{:<12.2}", 1.1234) <<endl; //direita
  cout << format("{:^12.3}", 1.1234) <<endl; //direita
}
Saída
***********1
1.1---------
++++1.12++++

A formatação de data-hora em sua forma clássica envolve a biblioteca <ctime> para captura da data-hora local para a formatação com a função strftime no estilo-C:

Sintaxe
size_t strftime( char* str, std::size_t count, const char* format, const std::tm* tp );
Onde
str: string/buffer de destino da formatação
count: quantidade de bytes para escrever em str incluindo \n
format: string contendo identificadores de formatação
tp: struct contendo data-hora
Identificadores
%Y: Ano, 4-dígitos
%m: Mês, 01-12
%d: Dia do mês, 01-31
%H: Hora, 24h, 00-23
%I: Hora, 12h 01-12
%M: Minutos, 00-59
%S: Segundos, 00-59
Exemplo 10
#include 
#include 

using namespace std;

int main() {
    time_t dataHora= std::time(nullptr); // data-hora do sistema
    tm* dataHoraLocal= std::localtime(&dataHora); // data em formato local

    char dataFormatada[80]; //buffer
    //formata data em string: DD-MM-YYYY HH:MM:SS
    strftime(dataFormatada, sizeof(dataFormatada), "%d-%m-%Y %H:%M:%S", time_info);
Saída
11-06-2026 18:36:05

Em C++ 11 a 19, podemos utilizar <chrono>, <ctime> e <iomanip> para converter e formatar uma data-hora via função put_time da biblioteca <iomanip> como pode ser conferido no exemplo a seguir:

Exemplo 11
#include <iostream>
#include <chrono>
#include <iomanip> //put_time
#include <ctime> //time_t, tm

using namespace std;

int main() 
{
    auto dataHora = chrono::system_clock::now(); //recupera datahora corrente do sistema
    time_t dataHoraC= chrono::system_clock::to_time_t(dataHora ); //converte no estilo-c time_t

    tm* dataHoraLocal= std::localtime(&dataHoraC);//converte para data-hora local

    //formata data hora DD-MM-YYYY HH:MM:SS
    std::cout << std::put_time(dataHoraLocal, "%d-%m-%Y %H:%M:%S") << endl;
}
Saída
11-06-2026 18:36:51

A partir de C++ 20, essa formatação ficou muito mais limpa e simples de ser feita utilizando a função format da biblioteca <format>. No exemplo abaixo, recuperamos a data-hora corrente utilizando o método now da biblioteca <chrono>.

Sintaxe
string format( std::format_string fmt, Args&&... args ); 
Onde
fmt: string contendo identificadores de formatação
args: argumentos para formatação
Exemplo 12
#include <iostream>
#include <chrono>
#include <format>

using namespace std;

int main()
{
    // Get the current system time
    auto dataHora= chrono::system_clock::now(); //data hora corrente do sistema

    //Formata data DD-MM-YYYY HH:MM:SS
    string dataHoraFormatada= format("{:%d-%m-%Y}", dataHora);

    cout << dataHoraFormatada << endl;
}
Saída
11-06-2026
  1. 13/07/2026 - revisão 2 - Ajustes: objetivo/título 'datahora'; outros ajustes pontuais
  2. 11/06/2026 - revisão 1 - Adição: 'Datahora'
  3. 19/11/2025 - versão inicial: format, alinhamento, alinhamento e casas decimais