C++26: Um Salto Gigantesco para Recursos de Biblioteca Padrão em Tempo de Compilação

2025-05-01

O C++26 está prestes a revolucionar a programação em tempo de compilação com um aumento massivo no suporte constexpr na biblioteca padrão. Várias propostas (P2562R1, P1383R2, P3074R7, P3372R2, P3508R0, P3369R0) incorporam algoritmos de classificação estável, funções e , regras de união aprimoradas, quase todos os contêineres e adaptadores e algoritmos de memória especializados na categoria constexpr. Isso aprimora significativamente as capacidades de tempo de compilação, permitindo, por exemplo, a classificação em tempo de compilação de contêineres constexpr. Embora std::hive e std::hash permaneçam excluídos devido a limitações, o C++26 promete uma expansão dramática das possibilidades de programação em tempo de compilação.

Leia mais
Desenvolvimento biblioteca padrão

C++26: Um salto gigante para constexpr

2025-04-23

O C++26 está pronto para revolucionar o constexpr! Recursos futuros incluem conversões constexpr de void*, permitindo manipulação de memória mais flexível em tempo de compilação; constexpr placement new, permitindo a colocação de objetos em expressões constantes; e bindings estruturados constexpr, trazendo bindings estruturados em tempo de compilação. Essas melhorias expandem drasticamente o alcance do constexpr e capacitam a biblioteca padrão com recursos aprimorados em tempo de compilação.

Leia mais

Desempenho de Ranges em C++20: Uma reviravolta surpreendente

2025-04-19

O autor substituiu um loop cru por `std::ranges::transform` em um projeto C++, esperando um aumento de desempenho. Os testes revelaram um resultado surpreendente: um loop cru otimizado (usando `emplace_back` e `reserve`) se mostrou 20% mais rápido no Clang e 10% mais rápido no GCC. O artigo compara diferentes abordagens, destacando o desempenho e a legibilidade do código. A conclusão: priorize a legibilidade a menos que o desempenho seja um gargalo crítico.

Leia mais
Desenvolvimento

C++26: Recursos Removidos e Obsoletos

2025-03-20

O C++26 está removendo ou depreciando vários recursos. Isso inclui a remoção completa do `typedef` `std::allocator` obsoleto no C++20 e a sobrecarga sem argumentos de `std::basic_string::reserve()`; a remoção dos utilitários de conversão Unicode obsoletos e de `std::strtok`; a remoção de `strstreams` antigos e das APIs de acesso atômico `std::shared_ptr`; e a remoção de `std::wstring_convert`. Além disso, `std::is_trivial` está obsoleto, sendo sugerido o uso de alternativas `is_trivially_XXX` mais precisas; e `std::memory_order::consume` está obsoleto devido a especificação insatisfatória e dificuldades de implementação. Essas remoções e depreciações visam melhorar a segurança e a eficiência da linguagem e limpar funcionalidades desatualizadas.

Leia mais

C++26: Indexação de Pacotes Simplifica a Extração de Elementos

2025-01-24

Embora o C++11 tenha introduzido pacotes de parâmetros, a extração de elementos específicos permaneceu trabalhosa. O C++26, graças à proposta P2662R3, introduz a indexação de pacotes, permitindo acesso direto aos elementos do pacote usando o operador de índice, por exemplo, `T...[0]` para o primeiro elemento. Isso resulta em código mais limpo, mais legível e melhor desempenho em tempo de compilação. Embora a indexação negativa e o fatiamento ainda não sejam suportados, o recurso já é bastante utilizável, melhorando significativamente o desenvolvimento em C++.

Leia mais

C++26: Chegou o placeholder sem nome '_'

2025-01-11

O C++26 introduz um recurso inovador: o placeholder sem nome '_'. Ele resolve um incômodo de longa data em C++: o tratamento de variáveis não utilizadas. Anteriormente, os desenvolvedores precisavam de `[[maybe_unused]]` ou `std::ignore` para evitar avisos do compilador, especialmente com vinculações estruturadas. O placeholder '_' pode ser declarado várias vezes sem conflitos e implicitamente possui o atributo `[[maybe_unused]]`, simplificando o código e melhorando a legibilidade. Esse recurso já está implementado no GCC 14 e Clang 18.

Leia mais