Quelles sont les nouvelles fonctionnalités de C++17?
C++17 est maintenant complète, donc peu probable que l'expérience de grands changements. Des centaines de propositions ont été mises de l'avant pour le C++17.
Lequel de ces fonctionnalités ont été ajoutées en C++ en C++17?
Lors de l'utilisation d'un compilateur C++ qui prend en charge "C++1z", lesquelles de ces caractéristiques vont être disponible lorsque le compilateur mises à jour de C++17?
Liste complète des fonctionnalités, comme par Clang: bibliothèque, base de la langue.
ce blog bost a un bon résumé: bfilipek.com/2017/01/cpp17features.html
Voir l'officiel Change entre le C++14 et C++17 DIS (P0636r0) document pour une liste des principaux changements à partir de C++14 à C++17.
Est-il une liste similaire pour le C++14?
ce blog bost a un bon résumé: bfilipek.com/2017/01/cpp17features.html
Voir l'officiel Change entre le C++14 et C++17 DIS (P0636r0) document pour une liste des principaux changements à partir de C++14 à C++17.
Est-il une liste similaire pour le C++14?
OriginalL'auteur Yakk - Adam Nevraumont | 2016-06-27
Vous devez vous connecter pour publier un commentaire.
Fonctionnalités de langage:
Des modèles et des Génériques de Code
Modèle argument de la déduction pour les modèles de classe
template <auto>
Non-type de modèle arguments de bugs
template<template<class...>typename bob> struct foo {}
( Pliant + ... + expressions ) et Révisions
auto x{8};
est unint
la modernisation de
à l'aide de
par...
et listesLambda
constexpr lambdas
La capture de
*ceci
dans les lambdas[*this]{ std::cout << could << " be " << useful << '\n'; }
Attributs
[[fallthrough]]
,[[nodiscard]]
,[[maybe_unused]]
attributs[[attributs]]
ànamespace
s etenum { erator[[s]] }
à l'aide de
dans les attributs pour éviter d'avoir à répéter un attribut d'espace de noms.Compilateurs sont maintenant nécessaire pour ignorer les attributs non standards qu'ils ne reconnaissent pas.
Syntaxe de nettoyage
Inline variables
espace de noms A::B
Simple
static_assert(expression);
avec aucune chaînepas de
jet
saufthrow()
, etthrow()
estnoexcept(true)
.Nettoyant multi-retour et le contrôle de flux
Structuré liaisons
std::tie
avecauto
const auto [it, inserted] = map.insert( {"foo", bar} );
it
etinserted
avec en déduire le type de l'pair
quemap::insert
retourne.std::array
s et relativement plat des structuresif (initialisation; condition)
etswitch (initialisation; condition)
if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
if(decl)
pour les cas oùdecl
n'est pas convertible-à-bool raisonnablement.La généralisation de la gamme, à base de boucles
si constexpr
Divers
Hexadécimal float point de littéraux
Allocation dynamique de la mémoire pour les données alignées
Garanti copie élision
Ordre fixe-de-évaluation pour les (un peu) les expressions avec certains les modifications
.then
sur les travaux futurs.Direct liste d'initialisation d'énumérations
De la progression des garanties à jeun (GJ) (aussi, FPGs pour les algorithmes parallèles)
u8 U', u8 PAS", u8 F', u8'8'
les chaînes de caractères (string existait déjà)"noexcept" dans le système de type
__a_include
Des tableaux de pointeur de la conversion des correctifs
héritée des constructeurs des correctifs pour certains cas particuliers (voir P0136R0 pour des exemples de changements de comportement)
agrégation de l'initialisation de l'héritage.
std::blanchir
, tapez beaucoup les jeux de mots, etcAjouts de bibliothèque:
Types de données
std::variant<Ts...>
std::optional
std::aucun
std::string_view
std::string
comme référence-à-personnage-array ou chaînestring const&
de nouveau. Peut aussi faire de l'analyse d'un bajillion fois plus rapide."hello world"sv
char_traits
std::octet
plus que ce qu'ils pouvaient mâcher.Invoquer des trucs
std::invoke
std::appliquer
std::make_from_tuple
,std::apply
appliquée à la construction de l'objetis_invocable
,is_invocable_r
,invoke_result
result_of
is_invocable<Foo(Args...), R>
est "pouvez-vous appelerFoo
avecArgs...
et obtenir quelque chose de compatible avecR
", oùR=void
est par défaut.invoke_result<Foo, Args...>
eststd::result_of_t<Foo(Args...)>
mais apparemment moins à confusion?Système de fichiers TS v1
[classe.chemin]
[classe.système de fichiers.erreur]
[classe.file_status]
[classe.directory_entry]
[classe.directory_iterator]
et[classe.recursive_directory_iterator]
[fs.ops.funcs]
fstream
s peut être ouvert avecpath
s, ainsi qu'avecconst chemin::value_type*
chaînes.De nouveaux algorithmes
for_each_n
reduce
transform_reduce
exclusive_scan
inclusive_scan
transform_exclusive_scan
transform_inclusive_scan
Ajoutée pour l'enfilage fins, exposés, même si vous n'êtes pas à l'aide de leur filetée
Filetage
std::shared_mutex
atomic<T>
::is_always_lockfree
scoped_lock<Mutex...>
std::lock
de la douleur lors de la fermeture de plus d'un mutex à la fois.Le parallélisme TS v1
std
algorithmes, et liées à des machineshardware_*_interference_size
(parties de) Bibliothèque Fondamentaux TS v1 non couverts ci-dessus ou au-dessous de
[func.les chercheurs]
et[alg.recherche]
[(pmr)]
std::function
pour allocateursstd::exemple
, de l'échantillonnage à partir d'une gamme?Conteneur Des Améliorations
try_emplace
etinsert_or_assign
L'épissage pour
map<>
,unordered_map<>
,set<>
etunordered_set<>
non-const
.de données()
pour la chaîne.non-membre
std::size
,std::vide
,std::data
std::begin
/end
Minimes de type incomplète de soutien dans des conteneurs
Contiguë itérateur "concept"
constexpr
itérateursLa
emplace
famille de fonctions maintenant retourne une référence à l'objet créé.Smart pointeur se transforme en
unique_ptr<T[]>
fixe et d'autresunique_ptr
tweaks.weak_from_this
et certains fixé partagée à partir de cetteAutres
std
datatype améliorations:{}
constructionstd::tuple
, et d'autres améliorationsDivers
C++17 bibliothèque est fondée sur C11 au lieu de C99
Réservés
std[0-9]+
pour l'avenir des bibliothèques standarddestroy(_a|_n)
,uninitialized_move(_n)
,uninitialized_value_construct(_n)
,uninitialized_default_construct(_n)
std
implémentations exposésstd::pince()
std::clamp( a, b, c ) == std::max( b, std::min( a, c ) )
environpgcd
etlcm
std::uncaught_exceptions
std::as_const
std::bool_constant
_v
les variables de modèlestd::void_t<T>
std::owner_less<void>
std::less<void>
, mais pour les pointeurs intelligents de tri basé sur le contenustd::chrono
polonaisstd::conjonction
,std::disjonction
,std::la négation
exposésstd::not_fn
std
std::default_order, indirection sur(les sauts de ABI de certains compilateurs due à l'amputation des noms, enlevées).std::less
.Traits
Obsolète
<codecvt>
memory_order_consume
result_of
, remplacé parinvoke_result
shared_ptr::unique
, il n'est pas thread-safeIsocpp.org a a une liste indépendante de changements depuis le C++14; il a été partiellement pillée.
Naturellement TS les travaux se poursuivent en parallèle, donc il y a des TS qui ne sont pas tout à fait mûrs qui devra attendre pour la prochaine itération. L'objectif pour la prochaine itération est le C++, 20 comme prévu, pas du C++19 comme certaines rumeurs implicite. C++1O a été évité.
Liste initiale prises de ce post reddit et ce post reddit, avec des liens ajouté par googler ou de la ci-dessus isocpp.org page.
Entrées supplémentaires pillés de SD-6 la fonctionnalité de liste de test.
clang la liste des nouveautés et bibliothèque liste des fonctionnalités sont les prochains à être pillé. Cela ne semble pas être fiable, car il est le C++, 1z, pas du C++17.
ces diapositives eu quelques fonctionnalités manquantes ailleurs.
Alors que "ce qui a été enlevé" n'a pas été demandé, voici une courte liste de quelques choses ((surtout?) précédente obsolète) qui sont supprimés en C++17 à partir de C++:
Supprimée:
s'inscrire
, mot-clé réservé pour une utilisation futurebool b; ++b;
<fonctionnel>
trucs,random_shuffle
std::function
Il y avait rewordings. Je ne suis pas sûr si ces ont aucun impact sur le code, ou si ils sont juste des nettoyages dans la norme:
Papiers ne sont pas encore intégrés dans ci-dessus:
P0505R0 (constexpr chrono)
P0418R2 atomiques (tweaks)
P0512R0 (argument de modèle déduction de bricolage)
P0490R0 (structuré de liaison de bricolage)
P0513R0 (changements de
std::hash
)P0502R0 (parallèle exceptions)
P0509R1 (mise à jour des restrictions sur la gestion des exceptions)
P0012R1 (font exception les spécifications de faire partie du système de type)
P0510R0 (restrictions sur les variantes)
P0504R0 (balises pour option/variante/toutes)
P0497R0 (partagé ptr tweaks)
P0508R0 (structuré liaisons poignées de nœuds)
P0521R0 (pointeur partagé nombre d'utilisations et modifications uniques?)
Spec changements:
Autre référence:
documents rassemblés par an; pas tous acceptés
https://isocpp.org/files/papers/p0636r0.html
OriginalL'auteur Yakk - Adam Nevraumont