C++1x - Définition

Source: Wikipédia sous licence CC-BY-SA 3.0.
La liste des auteurs de cet article est disponible ici.

Extensions du langage

Multitâche

Mémoire locale pour un thread

Le modificateur volatile

Les classes

Délégation du constructeur

Héritage du constructeur

Initialiseurs d'attributs

Sizeof sur les attributs de classes sans objet explicite

Suppression et mise à défaut des fonctions standards des objets

Opérateur de conversion explicite

Liste d'initialiseurs

Modification de la définition des POD (Plain Old Data)

Les Templates

Alias de templates grâce au mot clé using (template typedef)

Nombre de paramètres template infini

Les Concepts

Les concepts ont été retirés de la prochaine norme

Les chevrons (<>)

Template extern

Autres nouvelles fonctionnalités du C++1x

Expressions constantes généralisées

Assertions statiques

La bibliothèque BOOST propose déjà cette facilité à travers la macro BOOST_STATIC_ASSERT. Cependant son implémentation est étrange, basé sur la métaprogrammation et des comparaisons de taille de structures intermédiaires créés pour l'assertion sans trop de rapport avec le concept d'assert. Par conséquent, intégrer la fonction dans le langage apporte une solution propre au problème.

En pratique, une assertion statique permet de vérifier à la compilation qu'une valeur est vraie. Par exemple, il est possible d'implémenter les concepts en utilisant boost::traits et BOOST_STATIC_ASSERT. Si une classe template nécessite que son type template soit un POD, elle peut faire une assertion statique sur boost::is_pod::type::value, ce qui est un constante intégrale de type unspecified-bool-type et remplit dont le critère pour paraître dans une assertion statique.

En outre, en C++1x, l'expression

      static_assert(sizeof(long) > sizeof(int))      

permettrait a une bibliothèque d'être certaine qu'elle est compilée sur un système vérifiant cette condition. (x86-64 par exemple)

Expressions et fonctions lambda

Détermination du type

Le mot-clé auto se voit assigner une nouvelle sémantique par le nouveau standard. Nous connaissions son unique sémantique d'indicateur de classe de stockage pour une variable. En effet, déclarer une variable en auto revenait à indiquer au compilateur que la variable était valide seulement dans l'espace où elle était déclarée; ce comportement par défaut, le mot clé était inutile. Dans le nouveau standard, il change de sémantique et prend la place du type dans la déclaration. Le type sera alors automatiquement décidé par correspondance avec le type retourné par l'objet utilisé pour l'initialisation de la variable. exemple:

      auto f = boost::bind(MyFunc, _1);      f(5);      

le type de f est un type interne de la bibliothèque surchargé environ quatre-vingts fois avec un script Perl. Trouver le type exact pour stocker le résultat d'un bind dans un objet n'était pas pratique du tout avant la fonctionnalité auto.

Sémantique des RValues Reference/Move

Énumérations fortement typées

Boucles basées sur des intervalles

Nouveaux littéraux "chaînes de caractères"

Littéraux définis par l'utilisateur

Destruction des objets transparentes

Pointeur NULL

Le nouveau mot-clé nullptr a été proposé comme constante du langage avec le caractère particulier d'être assignable a tous les types de pointeurs. En effet, contrairement au C où la macro préprocesseur est généralement définie comme #define NULL ((void*)0 ), en C++ il est interdit d'assigner un void* a un pointeur d'un type différent. L'usage était donc de définir NULL avec l'entier 0. Ce comportement restera compatible, mais il sera aussi possible d'écrire T* ptr = nullptr;

Page générée en 0.092 seconde(s) - site hébergé chez Contabo
Ce site fait l'objet d'une déclaration à la CNIL sous le numéro de dossier 1037632
A propos - Informations légales
Version anglaise | Version allemande | Version espagnole | Version portugaise