Características da linguagem:
Modelos e código genérico
Lambda
Atributos
Limpeza de sintaxe
Controle multi-retorno e fluxo mais limpo
Diversos
Adições à biblioteca:
Tipos de dados
Invocar coisas
std::invoke
- Ligue para qualquer número que possa ser chamado (ponteiro de função, função, ponteiro de membro) com uma sintaxe. Do conceito padrão do INVOKE.
std::apply
- Toma uma tupla semelhante a uma função e descompacta a tupla na chamada.
std::make_from_tuple
, std::apply
aplicado à construção do objeto
is_invocable
, is_invocable_r
,invoke_result
Rosqueamento
Melhorias em contêineres
Alterações inteligentes do ponteiro
Outras std
melhorias no tipo de dados:
Diversos
A biblioteca C ++ 17 é baseada em C11 em vez de C99
Reservado std[0-9]+
para futuras bibliotecas padrão
destroy(_at|_n)
, uninitialized_move(_n)
, uninitialized_value_construct(_n)
,uninitialized_default_construct(_n)
- código utilitário já na maioria das
std
implementações expostas
- Funções matemáticas especiais
- os cientistas podem gostar deles
std::clamp()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
aproximadamente
gcd
e lcm
std::uncaught_exceptions
- Necessário se você quiser jogar apenas se estiver protegido contra destruidores
std::as_const
std::bool_constant
- Um monte de
_v
variáveis de modelo
std::void_t<T>
- Surpreendentemente útil ao escrever modelos
std::owner_less<void>
- como
std::less<void>
, mas para que ponteiros inteligentes classifiquem com base no conteúdo
std::chrono
polonês
std::conjunction
, std::disjunction
,std::negation
Exposta
std::not_fn
- Regras para não exceção dentro
std
- std :: is_contiguous_layout , útil para hash eficiente
- std :: to_chars / std :: from_chars , alto desempenho, conversão de número independente de localidade; finalmente, uma maneira de serializar / desserializar para formatos legíveis por humanos (JSON & co)
std :: default_order , indireto sobre std::less
. ( quebra a ABI de alguns compiladores devido ao nome incorreto, removido.)
Traits
Descontinuada
O Isocpp.org possui uma lista independente de alterações desde o C ++ 14; foi parcialmente saqueado.
Naturalmente, o trabalho com TS continua em paralelo; portanto, existem alguns TS que ainda não estão maduros e terão que esperar pela próxima iteração. O destino para a próxima iteração é C ++ 20, conforme planejado anteriormente, não C ++ 19, como alguns rumores implicavam. C ++ 1O foi evitado.
Lista inicial retirada deste post do reddit e deste post do reddit , com links adicionados via googling ou na página isocpp.org acima.
Entradas adicionais saqueadas da lista de teste de recursos do SD-6 .
lista de recursos do clang e lista de recurso de biblioteca estão ao lado de ser saqueada. Isso não parece confiável, pois é C ++ 1z, não C ++ 17.
esses slides tinham alguns recursos ausentes em outro lugar.
Embora "o que foi removido" não tenha sido solicitado, aqui está uma pequena lista de algumas coisas ((principalmente?) Anteriores descontinuadas) que foram removidas no C ++ 17 do C ++:
Removido:
Houve reformulações. Não tenho certeza se isso tem algum impacto no código ou se são apenas limpezas no padrão:
Artigos ainda não integrados acima:
P0505R0 (cronógrafo constexpr)
P0418R2 (ajustes atômicos)
P0512R0 (ajustes na dedução do argumento do modelo)
P0490R0 (ajustes de ligação estruturados)
P0513R0 (muda para std::hash
)
P0502R0 (exceções paralelas)
P0509R1 (atualizando restrições no tratamento de exceções)
P0012R1 (faça com que as especificações de exceção façam parte do sistema de tipos)
P0510R0 (restrições sobre variantes)
P0504R0 (tags para opcional / variante / qualquer)
P0497R0 (ajustes de ptr compartilhados)
P0508R0 (identificadores de nó de ligações estruturadas)
P0521R0 (contagem de uso de ponteiro compartilhado e alterações exclusivas?)
Alterações nas especificações:
Referência adicional: