Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

C++14 : le draft final a été publié
Découvrez son contenu et ce qu'apporte la nouvelle spécification

Le , par LittleWhite

0PARTAGES

15  0 

Le draft final de la nouvelle version du C++14 est publié. La seconde bonne nouvelle, c'est que les compilateurs les plus utilisés supportent déjà cette nouvelle version. Voici ce qu'elle nous apporte :
  • N3323 - Correction de certaines conversions contextuelles du C++ : améliorations du comportement de conversion à un unique opérateur, alors que la conversion d'une valeur de la classe vers le type spécifié par le contexte est possible ;
  • N3472 - valeurs binaires : vous pouvez maintenant écrire des valeurs binaires telles que char c = 0b01011010 ;
  • N3531 - valeurs définies par l'utilisateur pour les types standards : Unité de temps SI.
    Code : Sélectionner tout
    auto d = 2h + 5s + 234ms; // d est une durée de 2 heures, 5 secondes, et 234 millisecondes
  • N3638 - decltype(auto) && déduction du type de retour pour les fonctions normales : decltype(auto) devient légal en C++. Le type de retour peut être déduit à partir de la valeur de retour. Cela résout les problèmes de déduction dans les fonctions récursives et le retour de référence ;
  • N3648 - Capture de variables initialisées dans les lambdas : vous pouvez capturer des variables initialisées ou non initialisées :
    Code : Sélectionner tout
    1
    2
    3
    4
    5
    int x = 4;
    auto y = [&r = x, x = x+1]()->int { 
        r += 2;
        return x+2;
    }(); // Met à jour ::x à 6, et initialise y à 7.
  • N3649 - Expression (polymorphique) générique pour les lambdas : permet à un lambda d'utiliser auto comme spécificateur de type dans la déclaration des paramètres : auto add = [](auto a,auto b){return a + b;} ;
  • N3651 - Variables templates : une variable peut maintenant être un template :
    Code : Sélectionner tout
    1
    2
    template<typename T>
    constexpr T pi = T(3.1415926535897932385);
  • N3652 - Soulagement des prérequis pour les fonctions contexpr : vous pouvez dorénavant utiliser une fonction contexpr qui n'est pas statique ou thread_local, utiliser if (else/if else) et switch (mais pas goto), utiliser des boucles, des objets dont le temps de vie démarre dans l’évaluation contexpr et qui peut changer ;
  • N3653 - Initialiseurs de membre et regroupement : vous pouvez maintenant utiliser les accolades d'initialisation dans le regroupement de membres d'un tableau ;
  • N3664 - Clarification des allocations de mémoire : reformulation des explications de l'allocation de mémoire du standard ;
  • N3760 - [[deprecated]] : nouvel attribut pour signaler un élément déprécié ;
  • N3781 - Séparateur de chiffre : le ' peut être utilisé comme séparateur dans les nombres : 1'000'000 ;
  • N3778 - Opérateur global de déallocation avec une indication de taille : le C++11 apportait un opérateur de déallocation ayant un opérateur de taille, mais un tel opérateur n'était pas global. C'est maintenant corrigé.
  • make_unique : vous pouvez dès à présent faire toutes vos allocations de mémoire sans jamais utiliser directement new et delete.

Durant la dernière rencontre à Issaquah, les éléments suivants ont été discutés :
  • N3887 - Alias de méta-fonction consistent : les méta-fonction devait avoir un nommage consistent et seul l'élément tuple_element_t manquait dans le standard. C'est corrigé dans le C++14 ;
  • N3891 - Renommage de shared_mutex en shared_timed_mutex : afin d'éviter un possible conflit de nom, le shared_mutex a été renommé en shared_timed_mutex ;
  • N3910 - Que peuvent faire les gestionnaires de signaux ? : clarification des termes des gestionnaires de signaux du standard C++ ;
  • N3924 - Utilisation de rand découragée en C++14 : Rien n'a été déprécié dans le C++14 à l'aide du nouvel attribut. Un des bons candidats serait rand qui n'est pas déprécié (simplement marqué pour être déprécié), par contre std::random_shuffle l'est ;
  • N3927 - Définition de lock-free : reformulation afin de gagner en précision de la définition de lock-free.


Votre opinion

Quelles sont les choses que vous attendiez le plus ?
Quelles sont les éléments que vous auriez voulu voir dans cette version ?

Source

Billet

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Arzar
Membre émérite https://www.developpez.com
Le 19/08/2014 à 15:23
Bonjour,
Une autre petite amélioration de la STL C++14 très appréciable :
N3531 - User-defined Literals for Standard Library Types (version 3) : Unité de temps SI.
Code : Sélectionner tout
auto d = 2h + 5s + 234ms; // d is a duration of 2 hours, 5 seconds, and 234 milliseconds
3  0 
Avatar de Uther
Expert éminent sénior https://www.developpez.com
Le 21/08/2014 à 16:35
Je ne suis qu'un utilisateur ponctuel de C++, mon avis n'est peut-être pas représentatif, mais je trouve que le fait de pouvoir utiliser auto presque partout est plus un problème qu'une amélioration. C'est vrai que rien n'oblige a l'utiliser et qu'on a déjà tous les outils possibles en C++ pour faire du code dont le fonctionnement n'est pas évident, mais je me serait passé d'ajouter celui là.
3  0 
Avatar de JolyLoic
Rédacteur/Modérateur https://www.developpez.com
Le 21/08/2014 à 21:14
J'ai commencé à me mettre à "AAA", pour voir ce que ça donne, et l'impression que j'en ai pour l'instant, c'est que ça améliore plutôt la lisibilité quand le reste du code est bien écrit (par exemple, on a plein de vieux code qui prend une valeur de retour en argument par référence, et là, ça reste lourd). Mais je n'ai pas encore assez de recul pour donner un avis définitif.
3  0 
Avatar de ternel
Expert éminent sénior https://www.developpez.com
Le 19/08/2014 à 15:49
Je suis peut-être bigleux, mais je n'ai pas trouvé le draft lui-même.

Où peut-on le trouver?
2  0 
Avatar de Luc Hermitte
Expert éminent sénior https://www.developpez.com
Le 20/08/2014 à 11:04
Ce que j'attendais. make_unique, lambda génériques, le relâchement des contraintes pour l'écriture de fonctions constexpr , la syntaxe étendue pour les initialiseurs de membre et regroupement,

Ce que j'aurai voulu vu voir: n4075 sur la programmation par contrat. Mais visiblement, le sujet n'est pas abandonné même si cette forme l'a été -> n4110, une étude de Andrzej Krzemie&#329;ski (je donne les liens ici: http://luchermitte.github.io/blog/20...2014-ou-2017-p ). Et sur le sujet, j'aurai bien aimé que vector::operator[] requière un assert() sur ces préconditions ; en fait: j'aimerai que toutes les préconditions exprimées dans la norme soit doublées d'assertions -- si le n4075 était passé, cela aurait été STD_ASSERT_CONTRACT() plutôt qu'assert(), mais l'idée est la même. Certes, il y a les SL checkées, mais ce n'est pas standardisé et la forme varie dans mes souvenirs (IIRC, VC++ lance des exceptions (il faudrait que je vérifie)).
2  0 
Avatar de
https://www.developpez.com
Le 25/08/2014 à 17:01
Je m'attends à une séries de joies dans l'avenir du c++, quand j'ai vu cet article je me suis dis cool!

Le c++11 m'a tellement aidé (surtout au niveau de la méta-programmation) et m'a permis de pouvoir me débarrasser de certaines bibliothèques. (Il faut dire que le c++11 intègre une grosse partie des fonctionnalités de cette bibliothèque)
C'est entre autre grâce au c++11 et au c++14 que j'ai pu faire un système de sérialisation de manière simple et rapide avec mon framework.

Bref cette norme est géante grâce aux template variadiques entre autre et aux classes de traits. (Même si la syntaxe reste assez complexe, au début je n'avais pas l'habitude d'utiliser des structures plutôt que des boucles pour itérer mais avec l'habitude on s'y fais vite!)

Le c++14 semble être une amélioration syntaxique du c++11 plutôt que une intégration de nouveautés, moi ce que j'attends surtout c'est de voir comment va évoluer cette syntaxe! (Et de voir si il y aura encore des nouveautés énormes comme celle des variadique template.)

Un système de macro évolué qui nous permettrai d'exporter les macros en dehors d'une bibliothèque, modifier les .h et pouvoir recompiler la bibliothèque par exemple. (Bien que je pense que ça doit déjà être possible de le faire avec des bibliothèques dynamique.)

Bref je suis impatient de voir ce que ça va donner au niveau de la méta-programmation dans le futur.
1  0 
Avatar de ternel
Expert éminent sénior https://www.developpez.com
Le 25/08/2014 à 17:05
Si tu fais référence à Boost, il ne faut pas rechigner à l'utiliser, vu qu'elle constitue en quelque sort la préversion de la future norme.
Il faudrait la considérer comme la "vraie" bibliothèque standard.
2  1 
Avatar de LittleWhite
Responsable 2D/3D/Jeux https://www.developpez.com
Le 19/08/2014 à 15:52
Merci
C'est tout de même très lié aux valeurs binaires, si je comprend bien.
0  0 
Avatar de Ubiquité
Membre confirmé https://www.developpez.com
Le 20/08/2014 à 9:42
Citation Envoyé par LittleWhite Voir le message

Quelles sont les choses que vous attendiez le plus ?
Ce que j'attendais le plus c'est pouvoir écrire des nombre binaires en binaires, je comprend pas d'ailleurs pourquoi c'était pas là avant, ca devait pas être très très compliqué à implémenter.
Mais ca fait plaisir aussi de pouvoir utiliser les expression génériques pour les lambdas, le make_unique, et que ce soit beaucoup plus simple d'avoir une fonction constexpr !
0  0 
Avatar de Xiz0r
Nouveau Candidat au Club https://www.developpez.com
Le 20/08/2014 à 11:05
Tous n'est pas encore implémente sur GCC.... ;(

https://gcc.gnu.org/projects/cxx1y.html
0  0