C++17 est maintenant officialisé
Les fonctionnalités intégrées au C++17 ont été décidées au cours du meeting à Oulu
Le comité autour du C++ s'est une nouvelle fois réuni afin de décider du contenu de la nouvelle version du langage de programmation C++.
Le comité a conclu une entente et la liste des fonctionnalités ne changera plus. Voici la liste des fonctionnalités qui intègreront C++17 :
Du côté des fonctionnalités la bibliothèque standard, les quatre points suivants ont été acceptés :
Pour rappel, il y a trois mois (lors de la réunion précédente), le comité s'était accordé pour intégrer les fonctionnalités suivantes :
- attributs [[fallthrough]], [[nodiscard]], [[maybe_unused]] ;
- constexpr lambdas ;
- généralisation des boucles sur ensemble ;
- capture de *this dans les lambdas ;
- valeurs littérales hexadécimales pour les nombres à virgules flottantes ;
Et pour la bibliothèque standard :
- (parts of) Library Fundamentals TS v1 ;
- Parallelism TS v1 ;
- File System TS v1 ;
- fonctions mathématiques spéciales ;
- hardware_*_interference_size ;
- .is_always_lockfree() ;
- clamp() ;
- non-const .data() pour les chaînes de caractères.
Comme nous l'avions vu, les concepts ne feront pas partie du C++17. Vous pouvez voir la liste complète des fonctionnalités ici.
Évidemment, une nouvelle version du langage n'est rien si les compilateurs ne la supportent pas. On pourra donc se renseigner sur le progrès du support pour clang ici et pour libc++ ici.
Votre opinion
:fleche: Avez-vous suivi les évolutions du C++17 ? Qu'est-ce qui vous intéresse le plus dans les nouvelles fonctionnalités ?
:fleche: Envisagez-vous de l'intégrer dans vos projets au plus tôt ? Comment gérez-vous une transition ?
Source
Page IsoCPP sur les fonctionnalités du langage
La spécification de la nouvelle version du langage C++ (C++17) est finalisée
La spécification de la nouvelle version du langage C++ (C++17) est finalisée
À la dernière minute, le comité a ajouté le type std::byte.
Le comité de réflexion autour du langage C++ s'est rassemblé une nouvelle fois à Kona (États-Unis) afin de finaliser la nouvelle version du C++. Actuellement, toutes les fonctionnalités sont spécifiées, il ne reste plus que l'approbation à la norme ISO pour que le C++17 soit inscrit dans le marbre. Toutefois, ces derniers correctifs sont mineurs et nous pouvons donc déjà nous pencher sur la nouvelle version.
Au cours du rassemblement et avant la finalisation du langage, un nouveau type a été introduit : std::byte (P0298R3). Ce type a été conçu spécifiquement pour les accès bruts à la mémoire. Jusqu'à présent, les programmeurs utilisaient char ou encore unsigned char qui sont conçus pour représenter avant tout des caractères. En plus, il est possible d'appliquer des opérations arithmétiques sur les char, ce qui ne convient pas. Bref, un nouveau type, pour permettre un code plus clair et plus de sécurité sur les types.
En plus du nouveau type std::byte, le C++17 apporte, entre autres :
- de nouvelles règles de déduction de types pour le mot clé auto sur les listes d'initialisation (N3922) ;
- l'ajout de if dans les expressions pouvant être résolues à la compilation (P0128R1) ;
- la déduction des arguments de template pour les classes templates (P0091R3) ;
- l'utilisation du mot clé auto pour les templates (P0127R1) ;
- la garantie sur l'omission de la copie (P0135R0) ;
- if et switch peuvent procéder à une initialisation if (status_code err = fct(); err != SUCCESS) (P0305R0) ;
- la garantie forward progress (P0296R0) ;
- les variables inline (P0386R0) ;
- les liaisons structurées (« Structured Bindings ») (N4659) ;
- l'affaiblissement de l'ordre d'évaluation fixe pour les expressions : pour enlever toute ambiguïté sur un code tel que f(i++,i) (P0145R2) ;
- l'allocation dynamique de mémoire pour les données sur alignées (P0035R4) ;
- la permission d'imbriquer les espaces de nommage et les énumérations : namespace X::Y { ... } (N4230) ;
- la permission d'avoir des attributs pour les namespace et énumérations (N4266) ;
- l'ajout des trois attributs [[fallthrough]], [[nodiscard]] et [[maybe_unused]] (N4640) ;
- l’ajout du support des caractères littéraux au format Unicode 8 bits (u8) (N4287) ;
- la permission de ne pas mettre un message dans static_assert (N3928) ;
- le remplacement de std::uncaught_exception par std::uncaught_exceptions (N4259) ;
- l'ajout des types std::variant et std::any (N4659 et P0220R1) ;
- une interface pour les systèmes de fichiers (N3505) ;
- la parallélisation des algorithmes de la STL (P0024R2) ;
- les lambdas constexpr (P0170r1) ;
- la généralisation des boucles sur ensemble (P0184R0) ;
- expressions de réductions (« fold expressions ») (N4295) ;
- la capture de *this dans les lambdas (P0018R3) ;
- les valeurs littérales hexadécimales pour les nombres à virgule flottante (P0245R1) ;
- résolution d'un manque de précision sur les conversions de qualificatifs pour les pointeurs pointant sur des tableaux de pointeurs (N4261) ;
- ajout des spécifications d'exceptions au système de typage (P0012R1) ;
- ajout de __has_include permettant de demande au préprocesseur si un fichier d'entête est disponible (P006R1) ;
- suppression de l'opérateur ++ pour les booléens (P0002R1) ;
- la suppression des trigraphs (N4086) ;
- la suppression du mot-clé register (P0001R1) ;
- la suppression de std::auto_ptr et std::random_shuffle (N4190) ;
- ....
Évidemment, le comité continue son travail sur les fonctionnalités qui n'ont pas pu être intégrées dans C++17. Ainsi, on peut espérer les voir dans C++20 :
- les concepts ;
- les ranges ;
- les modules ;
- le réseau ;
- les coroutines ;
- la réflexion ;
- les graphismes 2D (dans la lignée de cairo).
Du côté des compilateurs, le support complet de C++17 devrait bientôt arriver. Par exemple, GCC7 est en phase de stabilisation et devrait donc être bientôt disponible. De même pour clang 5.
Votre opinion
:fleche: Avez-vous déjà commencé des développements avec C++17 ? Quelles nouvelles fonctionnalités utilisez-vous ?
Source
L'annonce de Herb Sutter
Les fonctionnalités de C++17
De C++14 à C++17, qu’est-ce qui a changé avec la nouvelle version du langage C++ ?
De C++14 à C++17, qu’est-ce qui a changé avec la nouvelle version du langage C++ ?
un document de la Standard C++ Foundation
Comme nous l’avons annoncé il y a quelques jours, la spécification de la nouvelle version du langage C++ (C++17) est désormais finalisée, attendant l'approbation à la norme ISO. Si la publication du prochain standard pour le langage C++ sera faite plus tard cette année, on connait déjà les changements qui ont été opérés par rapport à C++14, le standard actuel.
La Standard C++ Foundation, une organisation chargée de la promotion de standards C++, a donc publié un document qui énumère tous les changements importants introduits depuis la publication de C++14. Le document présente entre autres les fonctionnalités supprimées ou obsolètes, les nouvelles fonctionnalités de base du langage, les nouvelles bibliothèques et les modifications aux fonctionnalités existantes.
:fleche: Changements officiels de C++14 à C++17
Votre opinion
:fleche: Pensez-vous que le C++ moderne va dans la bonne direction ou pas ?
:fleche: Quelle version de C++ utilisez-vous actuellement pour vos développements ?