Lançado C++23: visão geral das principais mudanças do novo padrão

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Lançado C++23: visão geral das principais mudanças do novo padrão



No mundo das linguagens de programação, ocorreu um evento marcante — o comitê internacional de padronização do C++ (ISO/IEC JTC1/SC22/WG21) aprovou oficialmente uma nova versão da linguagem: C++23. Este lançamento, que substitui o C++20, não é revolucionário, mas contém muitas melhorias há muito esperadas e úteis que tornarão o código mais limpo, seguro e eficiente. Vamos analisar as novidades mais importantes.



Principais novidades do C++23



1. std::print e std::println — substituição moderna para cout

Provavelmente, a mudança mais perceptível para a programação do dia a dia. As funções std::print e std::println, baseadas na poderosa formatação de std::format (C++20), foram adicionadas à biblioteca padrão. Agora, a saída no console tornou-se não apenas mais conveniente, mas também significativamente mais rápida do que com std::cout.

  • Exemplo: std::println("Olá, {}! Resposta: {}", nome, 42);
  • Vantagens: segurança de tipos, sintaxe legível, suporte a Unicode.


2. deducing this (P0847R7) — indicação explícita de this

Uma das novidades mais poderosas para metaprogramação e criação de bibliotecas. Agora é possível passar explicitamente o objeto this como parâmetro de uma função membro. Isso resolve problemas antigos com lambdas e CRTP (Curiously Recurring Template Pattern).

  • Permite escrever uma única função membro que funciona tanto com objetos const quanto não-const.
  • Simplifica a implementação do padrão "sobrecarga por qualificadores".


3. Operadores operator[] multidimensionais (P2128R6)

Uma funcionalidade há muito esperada — agora operator[] pode aceitar vários argumentos. Isso é fundamental para bibliotecas que trabalham com arrays multidimensionais (por exemplo, mdspan ou matrizes próprias).

  • Antes: matriz(2, 3) ou matriz[{2,3}]
  • Agora: matriz[2, 3] — natural e conciso.


4. std::expected — tratamento funcional de erros

Alternativa a exceções e códigos de retorno. O tipo std::expected<T, E> contém um valor válido ou um erro. Isso é especialmente valioso em sistemas onde exceções são proibidas (sistemas embarcados, núcleos de SO).



5. Melhorias em módulos e conceitos

Os módulos (C++20) receberam correções e estabilização. Agora eles são melhor suportados pelos compiladores. Os conceitos tornaram-se mais flexíveis, com a adição da possibilidade de usar auto nos parâmetros dos conceitos.



O que mais vale a pena destacar?

  • std::mdspan — span multidimensional para trabalhar com arrays.
  • Correções em std::ranges — estabilização e preenchimento de lacunas na API.
  • Atributo [[assume]] — dicas para o compilador otimizar.
  • Chamadas estáticas de operator() — possibilidade

Recommended Libraries