Nouveautés de Visual C++ 2010

Ce document présente les fonctionnalités Visual C++ nouvelles et améliorées disponibles dans Visual Studio 2010.

Compilateur et Éditeur de liens Visual C++

Mot clé auto

Le mot clé auto a un nouvel objectif. Utilisez la signification par défaut du mot clé auto pour déclarer une variable dont le type est déduit de l'expression d'initialisation dans la déclaration de la variable. L'option de compilateur automatique /Zc:auto appelle la signification nouvelle ou précédente du mot clé auto.

Spécificateur de type decltype

Le type de spécificateur decltype retourne le type d'une expression spécifiée. Utilisez le type de spécificateur decltype en association avec le mot clé auto pour déclarer un type qui est complexe ou connu uniquement du compilateur. Par exemple, utilisez la combinaison pour déclarer une fonction modèle dont le type de retour dépend des types de ses arguments template. Sinon, déclarez une fonction modèle qui appelle une autre fonction, puis retourne le type de retour de la fonction appelée.

Expressions lambda

Les fonctions lambda ont un corps de fonction mais pas de nom. Les fonctions lambda associent les meilleures caractéristiques de pointeurs de fonction et des objets de fonction.

Utilisez une fonction lambda en elle-même, comme un paramètre de fonction de modèle au lieu d'un objet fonction, ou avec le mot clé auto pour déclarer une variable de type lambda.

Référence Rvalue

Le déclarateur de référence rvalue (&&) déclare une référence à rvalue. Une référence rvalue vous permet d'utiliser la sémantique de déplacement et le transfert parfait pour écrire des constructeurs, des fonctions et des modèles plus efficaces.

Déclaration static_assert

Une déclaration static_assert teste une assertion logicielle au moment de la compilation, contrairement à d'autres mécanismes d'assertion qui testent au moment de l'exécution. Si l'assertion échoue, la compilation échoue et un message d'erreur spécifié est émis.

Mots clés nullptr et __nullptr

Le compilateur Visual C++ vous permet d'utiliser le mot clé nullptr avec le code natif ou avec le code managé. Le mot clé nullptr indique qu'un handle d'objet, un pointeur intérieur ou un type pointeur natif ne pointe pas sur un objet. Le compilateur interprète nullptr comme étant du code managé lorsque vous utilisez l'option de compilateur /clr et comme du code natif lorsque vous n'utilisez pas l'option /clr.

Le mot clé __nullptr spécifique à Microsoft a la même signification que nullptr, mais il s'applique uniquement au code natif. Si vous compilez du code C/C++ natif à l'aide de l'option de compilateur /clr, le compilateur ne peut pas déterminer si le mot clé nullptr est un terme natif ou managé. Pour indiquer clairement votre intention au compilateur, utilisez le mot clé nullptr pour spécifier le terme managé et __nullptr pour spécifier le terme natif.

Option de compilateur /Zc:trigraphs

Par défaut, la prise en charge des trigraphes est désactivée. Utilisez l'option de compilateur /Zc:trigraphs pour activer la prise en charge des trigraphes.

Un trigraphe se compose de deux points d'interrogation consécutifs (??) suivis d'un troisième caractère unique. Le compilateur remplace un trigraphe par le caractère de ponctuation correspondant. Par exemple, le compilateur remplace le trigraphe ??= par le signe dièse (#). Utilisez des trigraphes dans les fichiers sources C qui utilisent un jeu de caractères qui ne contient pas certains caractères de ponctuation.

Nouvelle option Optimisation guidée par profil

PogoSafeMode est une nouvelle option d'optimisation guidée par profil qui vous permet de spécifier s'il faut utiliser le mode sans échec ou le mode rapide lorsque vous optimisez votre application. Le mode sans échec est thread-safe, mais plus lent que le mode rapide. Le mode rapide est le comportement par défaut.

Nouvelle option Common Language Runtime (CLR) /clr:nostdlib

Une nouvelle option est ajoutée pour /clr (Compilation pour le Common Language Runtime). Si des versions différentes des mêmes bibliothèques sont incluses, une erreur de compilation est émise. La nouvelle option vous permet d'exclure les bibliothèques CLR par défaut afin que votre programme puisse utiliser une version spécifiée.

Nouvelle directive pragma detect_mistmatch

La directive pragma detect_mismatch vous permet de placer dans vos fichiers une balise qui est comparée à d'autres balises portant le même nom. L'éditeur génère une erreur s'il identifie plusieurs valeurs pour un même nom.

Intrinsèques XOP, intrinsèques FMA4 et intrinsèques LWP

De nouvelles fonctions intrinsèques ont été ajoutées pour permettre la prise en charge des technologies de processeur Fonctions XOP intrinsèques ajoutées pour Visual Studio 2010 SP1, Fonctions FMA4 intrinsèques ajoutées pour Visual Studio 2010 SP1 et Fonctions LWP intrinsèques ajoutées pour Visual Studio 2010 SP1. Utilisez __cpuid, __cpuidex pour identifier les technologies de processeur prises en charge sur un ordinateur donné.

Projets Visual C++ et le système de génération

MSBuild

Les solutions et projets Visual C++ sont désormais générés à l'aide de MSBuild.exe, qui remplace VCBuild.exe. MSBuild est l'outil de génération XML flexible et extensible utilisé par les autres types de projets et langages Visual Studio. Etant donné ce changement, les fichiers projet Visual C++ utilisent désormais un format de fichier XML et comportent l'extension de nom de fichier .vcxproj. Les fichiers projet Visual C++ des versions antérieures de Visual Studio sont automatiquement convertis vers le nouveau format de fichier. Pour plus d'informations, consultez MSBuild (Visual C++).

Répertoires VC++

Le paramètre Répertoires VC++ figure désormais dans deux emplacements. Utilisez les pages de propriétés du projet pour définir des valeurs par projet pour les répertoires VC++. Utilisez le Gestionnaire de propriétés et une feuille de propriétés pour définir des valeurs globales, par configuration pour les répertoires VC++.

Dépendances entre projets

Dans les versions antérieures, des dépendances définies entre les projets étaient stockées dans le fichier solution. Lorsque ces solutions sont converties vers le nouveau format de fichier projet, les dépendances sont converties en références entre projets. Cette modification peut affecter les applications car les concepts de dépendances de solution et références entre projets sont différents.

Macros et variables d'environnement

La nouvelle macro _ITERATOR_DEBUG_LEVEL appelle la prise en charge du débogage pour les itérateurs. Utilisez cette macro à la place des anciennes macros _HAS_ITERATOR_DEBUGGING et _SECURE_SCL.

Bibliothèques Visual C++

Bibliothèques Runtime d'accès concurrentiel

L'infrastructure Runtime d'accès concurrentiel prend en charge les applications et les composants qui s'exécutent simultanément, et elle est utilisée pour la programmation d'applications simultanées en Visual C++. Pour permettre la prise en charge de la programmation d'applications simultanées, la Bibliothèque de modèles parallèles fournit des conteneurs et des algorithmes à usage général afin d'effectuer un parallélisme affiné. La Bibliothèque d'agents asynchrones fournit un modèle de programmation basé sur acteur et des interfaces de passage de message pour des tâches de traitement « pipeline » et de flux de données de granularité grossière.

Bibliothèque C++ standard

La liste suivante décrit un grand nombre des modifications qui ont été apportées à la bibliothèque C++ standard.

  • La nouvelle fonctionnalité de langage C++ Référence rvalue a été utilisée pour implémenter la sémantique de déplacement et le transfert parfait pour de nombreuses fonctions de la bibliothèque de modèles standard. La sémantique de déplacement et le transfert parfait améliorent considérablement les performances des opérations qui allouent ou assignent des variables ou des paramètres.

  • Les références rvalue sont également utilisées pour implémenter la nouvelle classe unique_ptr, qui constitue un type pointeur intelligent plus sûr que la classe auto_ptr. La classe unique_ptr peut être déplacée mais elle ne peut pas être copiée. Elle implémente une sémantique de propriété stricte sans affecter la sécurité et fonctionne parfaitement avec des conteneurs qui connaissent les références rvalue. La classe auto_ptr est déconseillée.

  • Quinze nouvelles fonctions, telles que find_if_not, copy_if et is_sorted, ont été ajoutées à l'en-tête <algorithm>.

  • Dans l'en-tête <mémoire>, la nouvelle fonction make_shared constitue un moyen pratique, fiable et efficace de créer un pointeur partagé vers un objet au moment où celui est construit.

  • Les listes liées uniques sont prises en charge par l'en-tête <forward_list>.

  • Les nouvelles fonctions membres cbegin, cend, crbegin et crend fournissent un const_iterator qui se déplace vers l'avant ou vers l'arrière dans un conteneur.

  • L'en-tête <system_error> et les modèles correspondants prennent en charge le traitement des erreurs système de bas niveau.

  • Les membres de la classe exception_ptr peuvent être utilisés pour transporter des exceptions entre les threads.

  • L'en-tête <codecvt> prend en charge la conversion de divers encodages de caractères Unicode vers d'autres encodages.

  • L'en-tête <allocators> définit plusieurs modèles qui permettent d'allouer et de libérer des blocs de mémoire pour des conteneurs basés sur des nœuds.

  • L'en-tête <random> a fait l'objet de nombreuses mises à jour.

Bibliothèque MFC (Microsoft Foundation Class)

Fonctionnalités de Windows 7

MFC prend en charge de nombreuses fonctionnalités de Windows 7, telles que l'interface utilisateur du ruban, la barre des tâches, les listes de raccourcis, les miniatures avec onglets, l'aperçu des miniatures, la barre de progression, la superposition d'icône et l'indexation de la recherche. Étant donné que MFC prend automatiquement en charge de nombreuses fonctionnalités de Windows 7, vous n'aurez peut-être pas à modifier votre application existante. Pour permettre la prise en charge d'autres fonctionnalités dans de nouvelles applications, utilisez l'Assistant Application MFC afin de spécifier la fonctionnalité que vous souhaitez utiliser.

Prise en compte de l'interaction tactile multipoint

MFC prend en charge les applications dotées d'une interface utilisateur tactile multipoint, telles que les applications écrites pour le système d'exploitation Microsoft Surface. Une application tactile multipoint peut gérer des messages tactiles et des messages de mouvement Windows, qui sont des combinaisons de messages tactiles. Il vous suffit d'inscrire votre application aux événements tactiles et de mouvement pour que le système d'exploitation route les événements tactiles multipoint vers votre gestionnaire d'événements.

Reconnaissance des résolutions élevées

Par défaut, désormais les applications MFC reconnaissent les résolutions élevées. Si une application reconnaît les résolutions élevées (nombre élevé de points par pouce), le système d'exploitation peut mettre à l'échelle des fenêtres, du texte et d'autres éléments d'interface utilisateur sur la résolution d'écran actuelle. Cela signifie que la présentation d'une image mise à l'échelle sera très probablement correcte et que celle-ci ne sera pas découpée ou pixélisée.

Gestionnaire de redémarrage

Le Gestionnaire de redémarrage enregistre automatiquement les documents et redémarre votre application si elle se termine ou redémarre de façon inattendue. Par exemple, vous pouvez utiliser le Gestionnaire de redémarrage pour démarrer votre application après sa fermeture par une mise à jour automatique. Pour plus d'informations sur la configuration de votre application afin qu'elle utilise le gestionnaire de redémarrage, consultez Comment : ajouter la prise en charge du Gestionnaire de redémarrage.

CTaskDialog

La classe CTaskDialog peut être utilisée à la place de la boîte de message AfxMessageBox standard. La classe CTaskDialog affiche et rassemble plus d'informations que la boîte de message standard.

Bibliothèque SafeInt

La nouvelle bibliothèque SafeInt exécute des opérations arithmétiques sécurisées qui prennent en compte le dépassement sur les entiers. Cette bibliothèque compare également différents genres d'entiers.

Nouvelles macros ATL (Active Template Library)

De nouvelles macros ont été ajoutées à ATL pour développer les fonctionnalités de PROP_ENTRY_TYPE et de PROP_ENTRY_TYPE_EX. PROP_ENTRY_INTERFACE et PROP_ENTRY_INTERFACE_EX vous permettent d'ajouter une liste de CLSID valides. PROP_ENTRY_INTERFACE_CALLBACK et PROP_ENTRY_INTERFACE_CALLBACK_EX vous permettent de spécifier une fonction de rappel visant à déterminer si un CLSID est valide.

Avertissements /analyze

La plupart des avertissements /analyze (analyse du code d'entreprise) ont été supprimés des bibliothèques RunTime C (CRT), MFC et ATL.

Prise en charge de l'animation et de D2D

La bibliothèque MFC prend désormais en charge l'animation et les graphiques Direct2D. La bibliothèque MFC comporte plusieurs nouvelles classes et fonctions MFC permettant la prise en charge de cette fonctionnalité. En outre, deux nouvelles procédures pas à pas illustrent l'ajout d'un objet D2D et d'un objet d'animation à un projet. Ces procédures pas à pas sont Procédure pas à pas : ajout d'un objet D2D à un projet MFC et Procédure pas à pas : ajout d'une animation à un projet MFC.

IDE

Dans Visual C++ 2010, les performances, la précision, l'évolutivité et les outils de l'environnement de développement intégré unique (IDE) ont été considérablement améliorés afin de renforcer votre productivité.

Améliorations apportées à IntelliSense

IntelliSense pour Visual C++ a été complètement remanié pour être plus rapide, plus précis et pouvoir gérer des projets volumineux. Pour mettre en œuvre cette amélioration, l'IDE établit une distinction entre l'affichage et la modification du code source par un développeur et sa propre utilisation du code source et des paramètres de projet pour générer une solution.

Avec cette séparation des tâches, les fonctionnalités de recherche telles que l'option Affichage de classes et la nouvelle boîte de dialogue Naviguer vers sont gérées par un système qui repose sur un nouveau fichier de base de données SQL Server Desktop (.sdf) qui remplace l'ancien fichier du navigateur sans compilation (. ncb). Les fonctionnalités IntelliSense telles que les informations express, la saisie semi-automatique et l'aide sur les paramètres analysent les unités de traduction uniquement lorsque cela s'avère nécessaire. Les fonctionnalités hybrides telles que la nouvelle fenêtre Hiérarchie d'appels utilisent une combinaison des fonctionnalités de recherche et IntelliSense.

Dans la mesure où IntelliSense traite uniquement les informations requises au moment où vous en avez besoin, l'IDE est plus réactif. En outre, étant donné que les informations sont plus à jour, les vues et fenêtres IDE sont plus exactes. Enfin, l'infrastructure IDE étant mieux organisée, plus puissante et plus évolutive, elle peut gérer des projets volumineux.

Erreurs IntelliSense améliorées

L'IDE détecte mieux les erreurs qui pourraient provoquer une perte d'IntelliSense et affiche des soulignements ondulés rouges sous celles-ci. De plus, l'IDE signale les erreurs IntelliSense à la fenêtre Liste d'erreurs. Pour afficher le code qui provoque le problème, double-cliquez sur l'erreur dans la fenêtre Liste d'erreurs.

Fonctionnalité de saisie semi-automatique #include

L'IDE prend en charge la saisie semi-automatique pour le mot clé #include. Lorsque vous tapez #include, l'IDE crée une zone de liste déroulante de fichiers d'en-tête valides. Si vous continuez en tapant un nom de fichier, l'IDE filtre la liste en fonction de votre entrée. À tout moment, vous pouvez sélectionner dans la liste le fichier que vous souhaitez inclure. Cela vous permet de rapidement inclure des fichiers sans en connaître le nom exact.

Boîte de dialogue Naviguer vers

La boîte de dialogue Naviguer vers vous permet de rechercher tous les symboles et fichiers de votre projet qui correspondent à une chaîne indiquée. Les résultats de la recherche sont immédiatement modifiés à mesure que vous tapez d'autres caractères dans votre chaîne de recherche. Le champ de commentaire Résultats contient le nom d'éléments trouvés et vous permet de décider si vous devez limiter votre recherche. Les champs de commentaire Genre/Portée, Emplacement et Aperçu vous aident à lever l'ambiguïté entre des éléments qui portent des noms similaires. En outre, vous pouvez étendre cette fonctionnalité pour permettre la prise en charge d'autres langages de programmation.

Débogage parallèle et profilage

Le débogueur Visual Studio reconnaît le runtime d'accès concurrentiel et vous aide à résoudre des problèmes liés à des applications de traitement en parallèle. Vous pouvez utiliser le nouveau profileur d'accès concurrentiel pour visualiser le comportement global de votre application. En outre, vous pouvez utiliser de nouvelles fenêtres Outil pour visualiser l'état des tâches et leurs piles d'appels.

Concepteur de ruban

Le Concepteur de ruban est un éditeur graphique qui vous permet de créer et modifier une interface utilisateur de ruban MFC. L'interface utilisateur de ruban finale est représentée par un fichier de ressources basé sur XML (.mfcribbon-ms). Pour les applications existantes, vous pouvez capturer votre interface utilisateur de ruban actuelle en ajoutant temporairement quelques lignes de code et en appelant le Concepteur de ruban. Une fois le fichier de ressources de ruban créé, vous pouvez remplacer votre code d'interface utilisateur de ruban manuscrit par quelques instructions visant à charger la ressource de ruban.

Hiérarchie d'appels

La fenêtre Hiérarchie d'appels vous permet d'accéder à toutes les fonctions qui sont appelées par une fonction spécifique ou à toutes les fonctions qui appellent une fonction spécifique.

Outils

Assistant Classe MFC

Visual C++ 2010 rétablit l'outil tant estimé Assistant Classe MFC. L'Assistant Classe MFC est un moyen pratique d'ajouter des classes, des messages et des variables à un projet sans avoir à modifier manuellement des ensembles de fichiers sources.

Assistant Contrôle ATL

L'Assistant Contrôle ATL ne remplit plus automatiquement le champ Identificateur programmatique (ProgID). Si un contrôle ATL n'a pas de ProgID,, les autres outils pourront ne pas fonctionner avec lui. Un exemple d'outil qui requiert que les contrôles aient un ProgID est celui de la boîte de dialogue Insérer un contrôle ActiveX. Pour plus d'informations sur cette boîte de dialogue, consultez Insérer un contrôle ActiveX, boîte de dialogue.

Référence de Microsoft Macro Assembler

L'ajout du type de données YMMWORD prend en charge les opérandes multimédias 256 bits inclus dans les instructions AVX (Advanced Vector Extensions) d'Intel.

Voir aussi

Concepts

Modifications avec rupture dans Visual C++

Autres ressources

Mise en route de Visual C++ 2010