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. data
  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++++
  1. 19/11/2025 - versão inicial: format, alinhamento, alinhamento e casas decimais