Foi lançada a nova versão do C++: o que mudou na linguagem de programação
O comitê internacional de padronização do C++ (ISO/IEC JTC1/SC22/WG21) aprovou oficialmente a mais recente versão do padrão — C++23. Esta versão traz melhorias há muito esperadas que tornam a linguagem mais segura, expressiva e conveniente para o desenvolvimento de software de sistema e aplicativo. Contamos sobre as novidades mais significativas.
Principais mudanças no C++23
1. std::print — saída formatada sem esforço extra
Um dos recursos mais notáveis foi a introdução da função std::print. Agora, para saída no fluxo padrão, não é necessário escrever construções complexas com std::cout ou usar printf com risco de erros de tipo. std::print funciona com base em std::format, garantindo segurança de tipo e legibilidade:
- Formatação automática de números, strings e tipos definidos pelo usuário.
- Suporte a locales e Unicode.
- Velocidade próxima à do
printf, mas sem vazamentos de memória.
2. Trabalho aprimorado com corrotinas
As corrotinas, introduzidas pela primeira vez no C++20, receberam uma série de correções e complementos. No C++23, a sintaxe para declarar funções assíncronas foi simplificada, e foi adicionado suporte para std::generator — um novo tipo para criar sequências de valores dinamicamente:
- Geradores permitem escrever cálculos preguiçosos sem gerenciamento manual de estado.
- O volume de código boilerplate para trabalhar com corrotinas foi reduzido.
3. Módulos — estabilidade e desempenho
Embora os módulos tenham sido introduzidos no C++20, sua implementação nos compiladores deixava a desejar. No novo padrão, as regras de exportação e importação foram refinadas, resultando em:
- Redução do tempo de compilação de grandes projetos em 2 a 3 vezes.
- Compatibilidade total com arquivos de cabeçalho (modo híbrido).
- Possibilidade de criar módulos para a biblioteca padrão (experimental).
4. Novos recursos de constexpr e consteval
A expansão do contexto de expressões constantes é um dos principais objetivos do desenvolvimento do C++. No C++23, é permitido usar constexpr para:
- Alocação dinâmica de memória (
std::vectorestd::string). - Chamada de funções virtuais.
- Trabalho com ponto flutuante sem perda de precisão.
Isso permite executar cada vez mais cálculos em tempo de compilação, acelerando o runtime.
5. Atributo [[assume]] — dicas para o otimizador
O novo atributo [[assume(expressão)]] informa ao compilador que a expressão é verdadeira naquele ponto do código. Isso proporciona:
- Otimizações mais agressivas (remoção de ramificações, desenrolamento de loops).
- Aumento de desempenho em trechos críticos (motores de jogos, embedded).
6. Simplificação de multithreading
Foram adicionados novos tipos para sincronização: std::counting_semaphore com desempenho aprimorado e std::latch para barreiras de uso único. Além disso, foi adicionado suporte para std::mdspan