nouveautés - Quelles sont les nouvelles fonctionnalités de C++ 17?



difference between c++ 14 and c++ 17 (1)

Caractéristiques linguistiques:

Modèles et code générique

Lambda

Les attributs

Nettoyage de la syntaxe

Nettoyeur multi-retour et contrôle de flux

  • Fixations structurées

    • Fondamentalement, std::tie avec auto
    • Exemple:
      • const auto [it, inserted] = map.insert( {"foo", bar} );
      • Crée les variables it et inserted avec le type déduit de la pair par map::insert .
    • Fonctionne avec les tuple / pair-likes & std::array s et les structures relativement plates
    • Liaisons structurées réellement nommées dans la norme
  • if (init; condition) et switch (init; condition)

    • if (const auto [it, inserted] = map.insert( {"foo", bar} ); inserted)
    • Étend le if(decl) aux cas où decl n'est pas convertible en booléen raisonnable.
  • Généraliser des boucles for basées sur la plage

    • Il semble que ce soit principalement un support pour les sentinelles, ou des itérateurs de fin qui ne sont pas du même type que les débutants, ce qui aide les boucles à terminaison NULL et autres.
  • si constexpr

    • Fonctionnalité très demandée pour simplifier un code presque générique.

Misc

Ajouts à la bibliothèque:

Types de données

  • std::variant<Ts...>

    • Presque-toujours non vide la dernière fois que j'ai vérifié?
    • Type d'union étiqueté
    • {génial | utile}
  • std::optional

    • Peut-être détient l'un de quelque chose
    • Ridiculement utile
  • std::any

    • Peut contenir tout ce qui est copiable
  • std::string_view

    • std::string comme un tableau ou une sous- std::string référence à caractère
    • Ne jamais prendre un string const& again. Peut également rendre l'analyse d'un bajillion de fois plus rapide.
    • "hello world"sv
    • constexpr char_traits
  • std::byte off plus que ce qu'ils pourraient mâcher.

    • Ni un entier ni un caractère, juste des données

Invoquer des trucs

Système de fichiers TS v1

Nouveaux algorithmes

  • for_each_n

  • reduce

  • transform_reduce

  • exclusive_scan

  • inclusive_scan

  • transform_exclusive_scan

  • transform_inclusive_scan

  • Ajouté à des fins de threading, exposé même si vous ne les utilisez pas threadé

Filetage

(parties de) std::apply non traitées ci-dessus ou ci-dessous

Amélioration des conteneurs

Changements de pointeur intelligent

Autres améliorations du type de données std :

Misc

Traits

Obsolète

Isocpp.org a une liste indépendante de modifications depuis C ++ 14; il a été partiellement pillé.

Naturellement, le travail de TS se poursuit en parallèle, de sorte que certains TS qui ne sont pas encore assez mûrs devront attendre la prochaine itération. La cible pour la prochaine itération est C ++ 20 comme prévu précédemment, et non C ++ 19 comme le supposent certaines rumeurs. C ++ 1O a été évité.

Liste initiale tirée de ce post reddit et de ce post reddit , avec des liens ajoutés via googling ou à partir de la page isocpp.org ci-dessus.

Entrées supplémentaires extraites de la liste de tests de fonctionnalités du SD-6 .

La liste des fonctionnalités de clang et la liste des fonctionnalités de la library sont les suivantes à piller. Cela ne semble pas fiable, car il s’agit de C ++ 1z et non de C ++ 17.

certaines diapositives manquaient ailleurs sur ces diapositives .

Bien que "ce qui a été supprimé" n'ait pas été demandé, voici une courte liste de quelques éléments ((la plupart du temps obsolètes) obsolètes) qui sont supprimés de C ++ dans C ++ 17:

Enlevé:

Il y avait des reformulations. Je ne sais pas si cela a un impact sur le code, ou si ce sont juste des nettoyages dans la norme:

Papiers non encore intégrés ci-dessus:

  • P0505R0 (constexpr chrono)

  • P0418R2 (réglages atomiques)

  • P0512R0 (réglages de déduction d'argument de modèle)

  • P0490R0 (réglages de liaison structurés)

  • P0513R0 (change en std::hash )

  • P0502R0 (exceptions parallèles)

  • P0509R1 (restrictions de mise à jour sur la gestion des exceptions)

  • P0012R1 (les spécifications d'exception doivent faire partie du système de types)

  • P0510R0 (restrictions sur les variantes)

  • P0504R0 (étiquettes pour facultatif / variant / quelconque)

  • P0497R0 (réglages de ptr partagés)

  • P0508R0 ( P0508R0 noeud de liaisons structurées)

  • P0521R0 (nombre d'utilisations de pointeur partagé et modifications uniques?)

Modifications techniques:

Référence supplémentaire:

C ++ 17 est maintenant complet, il est donc peu probable que de gros changements se produisent. Des centaines de propositions ont été avancées pour C ++ 17.

Lesquelles de ces fonctionnalités ont été ajoutées au C ++ en C ++ 17?

Lors de l'utilisation d'un compilateur C ++ prenant en charge "C ++ 1z", quelles fonctionnalités seront disponibles lors de la mise à jour du compilateur vers C ++ 17?





c++17