Nouveautés de C++ dans Visual Studio 2022

Visual Studio 2022 apporte de nombreuses mises à jour et correctifs au compilateur et aux outils Microsoft C++. L’IDE Visual Studio offre également des améliorations significatives en matière de performances et de productivité, et s’exécute désormais en mode natif en tant qu’application 64 bits.

Nouveautés de C++ dans Visual Studio version 17.9

En bref, certaines des nouvelles fonctionnalités sont les suivantes :

  • #include diagnostics, qui fournit une analyse détaillée de vos #include directives. Activez cette fonctionnalité en cliquant avec le bouton droit sur une #include directive et en choisissant #include directives>Activer #include diagnostics de directive. Au-dessus de chacun #include est le nombre de fois où votre code fait référence à ce #include fichier. Cliquez sur le lien de référence pour accéder à l’emplacement où votre code utilise quelque chose à partir de ce fichier d’en-tête. Pour afficher l’heure de génération de vos #include directives, exécutez build Recommandations en accédant à Build>Run Build Recommandations on Solution>Build.

    Screenshot of #include diagnostics

    Au-dessus du # include est un lien **reference** et un certain nombre de références à ce fichier # include (dans ce cas 1). Le temps de génération est également répertorié (dans ce cas inférieur à 1/2 par seconde).

  • Visualisation de la disposition de la mémoire, qui montre comment la mémoire est organisée pour vos classes, structs et unions. Pointez sur un type et choisissez le lien Disposition de la mémoire dans les informations rapides pour ouvrir une fenêtre dédiée affichant la disposition de mémoire du type sélectionné. Le pointage sur des types de données individuels dans cette fenêtre fournit des informations détaillées sur leur taille et leur décalage au sein du type.

    Screenshot of the memory layout window

    La fenêtre de disposition de la mémoire affiche le contenu de la classe Snake. Il affiche les décalages de mémoire des différents champs de la classe, tels que les classes Point pour l’emplacement de la tête et du corps, le score, etc.

  • Vous pouvez maintenant spécifier votre propre exécutable CMake personnalisé. Cette fonctionnalité est utile si vous souhaitez utiliser une version spécifique de CMake qui n’est pas fournie avec Visual Studio. Accédez aux options outils> et sélectionnez CMake>Général. Sélectionnez Activer l’exécutable CMake personnalisé et spécifiez le chemin d’accès du répertoire de votre exécutable CMake.

    Screenshot of the CMake options dialog

    Boîte de dialogue options CMake avec l’option « Activer l’exécutable CMake personnalisé » et le champ « Répertoire exécutable CMake » mis en surbrillance.

  • Amélioration d’IntelliSense pour les projets Unreal Engine.
  • Amélioration de la prise en charge de C++23 : std::format et std::spanformattablerange_format, format_kind, et set_debug_format() dans le cadre de P2286R8 plages de mise en forme par P0009R18 et les modifications de formulation suivantes qui ont été appliquées<mdspan> à la norme C++23. format() Peut également mettre en forme des pointeurs par P2510R3.

Pour obtenir un résumé des mises à jour principales C++, consultez les mises à jour du back-end MSVC depuis Visual Studio 2022 version 17.3.

Pour obtenir un résumé des nouvelles fonctionnalités de l’IDE Visual Studio 17.9, consultez les notes de publication de Visual Studio 2022 version 17.9.

Nouveautés de C++ dans Visual Studio version 17.8

En bref, certaines des nouvelles fonctionnalités sont les suivantes :

  • Diagnostics structurés C++ dans la fenêtre Sortie et une nouvelle fenêtre de détails du problème qui fournit plus d’informations sur l’erreur. Pour plus d’informations, consultez la fenêtre Sortie SARIF structurée et Fenêtre des détails du problème.
  • Fonctionnalité qui vous permet de visualiser la taille et l’alignement de vos classes, structs, unions, types de base ou énumérations même avant la compilation du code. Pointez sur l’identificateur et une information rapide affiche les informations de taille et d’alignement.
  • Fonctionnalité qui suggère quand marquer les fonctions membres const, car elles ne modifient pas l’état de l’objet. Pointez sur une fonction membre et cliquez sur l’icône de l’ampoule pour marquer la fonction comme const.
  • Visual Studio vous invite désormais à marquer les fonctions globales comme statiques via une icône de tournevis qui apparaît à côté du nom de la fonction. Cliquez sur l’icône du tournevis pour marquer la fonction comme statique.
  • Les directives #include inutilisées sont grisées dans l’éditeur. Vous pouvez pointer sur l’include grisé et utiliser le menu Ampoule pour supprimer cet include ou tous les includes inutilisés. Vous pouvez également ajouter #include des directives pour les entités qui sont indirectement incluses via d’autres en-têtes. Pour plus d’informations, consultez Nettoyer les includes C/C++ dans Visual Studio.
  • Plus de prise en charge d’Unreal Engine :
    • L’adaptateur de test Unreal Engine vous permet de découvrir, d’exécuter, de gérer et de déboguer vos tests Unreal Engine sans quitter l’environnement de développement intégré Visual Studio.
    • Avec les extraits de code Unreal Engine, vous trouverez des constructions Unreal Engine courantes en tant qu’extraits de code dans votre liste de membres.
    • Build Insights est désormais intégré à Visual Studio 2022 et fonctionne avec des projets MSBuild et CMake à l’aide de MSVC. Vous pouvez maintenant voir des informations supplémentaires sur la compilation d’une fonction, telles que la durée nécessaire à la compilation et le nombre de ForceInlines.
  • La prise en charge des tests unitaires Linux distants vous permet désormais d’exécuter vos tests CTest et GTest sur vos machines Linux distantes à partir de l’explorateur de tests de Visual Studio, tout comme vos tests locaux.

Pour obtenir un résumé plus complet des nouvelles fonctionnalités C++ dans Visual Studio 17.8, consultez Nouveautés pour les développeurs C++ dans Visual Studio 2022 17.8.

Pour obtenir un résumé des nouvelles fonctionnalités dans l’environnement de développement intégré Visual Studio 17.8, consultez Notes de publication de Visual Studio 2022 version 17.8.

Nouveautés de C++ dans Visual Studio version 17.7

Pour obtenir un résumé des nouvelles fonctionnalités C++ dans Visual Studio 17.7, voir Nouveautés pour les développeurs C++ dans Visual Studio 2022 17.7.

En bref, certaines des nouvelles fonctionnalités sont les suivantes :

  • Sessions de débogage et temps de chargement de projet plus rapides
  • Visualisation pas à pas de l’expansion des macros
  • Téléchargement en un clic pour le Sous-système Windows pour Linux (WSL)
  • Prise en charge améliorée des commentaires Doxygen
  • Insights de génération C++ pour le développement de jeux
  • /std:clatest ajouté pour le compilateur C.
  • Améliorations apportées au projet Unreal Engine, telles que l’accélération d’IntelliSense et de la coloration syntaxique, la possibilité de trouver toutes les références Unreal Engine Blueprint, etc.

Pour obtenir un résumé des nouvelles fonctionnalités C++ spécifiques au développement de jeux, consultez Libérer la puissance de Visual Studio 2022 pour le développement de jeux C++

Pour obtenir un résumé des nouvelles fonctionnalités dans l’IDE Visual Studio 17.7 IDE, consultez Notes de publication de Visual Studio 2022 version 17.7.

Nouveautés de C++ dans Visual Studio version 17.6

Pour obtenir un résumé des nouvelles fonctionnalités C++ dans Visual Studio 17.6, voir Nouveautés pour les développeurs C++ dans Visual Studio 2022 17.6.

Bref, certaines des nouvelles fonctionnalités sont les suivantes : débogage de script CMake, prise en charge intégrée du langage hlSL (High Level Shading Language), visionneuse de journal unreal Engine, prise en charge initiale des projets C++20 en C++/CLI, VCPKG est désormais ajoutée par défaut, et certaines fonctionnalités de bibliothèque standard C++23 pour les plages. Pour afficher la liste complète des nouvelles fonctionnalités ajoutées à la bibliothèque standard, consultez le journal des modifications STL.

Pour obtenir un résumé des nouvelles fonctionnalités dans l’IDE Visual Studio 17.6, consultez Notes de publication de Visual Studio 2022 version 17.6.

Nouveautés de C++ dans Visual Studio version 17.5

Pour obtenir un résumé des nouvelles fonctionnalités C++ dans Visual Studio dans la version 17.5, voir Nouveautés pour les développeurs C++ dans Visual Studio 2022 17.5. Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans l’IDE Visual Studio version 17.5, consultez Notes de publication de Visual Studio 2022 version 17.5.

  • Désormais, std::move, std::forward, std::move_if_noexcept et std::forward_like ne produisent pas d’appels de fonction dans le code généré, même en mode débogage. Cette modification évite les casts nommés provoquant une surcharge inutile dans les builds de débogage. /permissive- (ou une option qui l’implique, comme /std:c++20 ou std:c++latest) est requise.

  • Ajout de l’attribut [[msvc::intrinsic]] pour prendre en charge l’élément ci-dessus. Vous pouvez appliquer cet attribut à des fonctions non récursives composées d’un seul cast, qui ne prennent qu’un seul paramètre.

  • Ajout de la prise en charge de la console Linux dans le terminal intégré, permettant d’effectuer des E/S de terminal.

  • Ajout de la prise en charge expérimentale initiale des primitives atomiques C11 (<stdatomic.h>). Vous pouvez activer cette fonctionnalité expérimentale avec l’option /experimental:c11atomics en mode /std:c11 ou version ultérieure.

  • Ajout d’un nouvel ensemble de vérifications expérimentales de haute confiance au vérificateur de durée de vie pour réduire le bruit.

  • Une nouvelle fonctionnalité en préversion, Remote File Explorer, vous permet d’afficher le répertoire de fichiers sur vos ordinateurs distants au sein de VS, et de charger et de télécharger des fichiers vers celui-ci.

  • Modification du contrôle de version des exécutables CMake fournis avec Visual Studio pour qu’il corresponde aux versions de Kitware.

  • Ajout de la prise en charge de la fonction Rechargement à chaud au modèle de projet CMake.

  • Go To Definition for C++ utilise désormais un indicateur plus subtil de l’opération prenant plus de temps, en remplaçant la boîte de dialogue modale des versions précédentes.

  • Lancement d’une expérience fournissant des résultats plus pertinents dans la liste dans l’autocomplétion C++ et la liste des membres. Cette fonctionnalité s’appelait auparavant IntelliSense prédictif, mais utilise désormais une nouvelle méthode de présentation.

  • Nous fournissons désormais un ensemble d’outils Arm64 Clang natif avec notre charge de travail LLVM, ce qui permet la compilation native sur les machines Arm64.

  • Ajout de la localisation à l’extension Image Watch (cette extension est disponible sur la Place de marché et n’est pas fournie via Visual Studio Installer).

  • Ajout de la prise en charge de l’ouverture d’une fenêtre de terminal dans le conteneur de développeur en cours d’exécution.

  • Intégration de plusieurs améliorations à l’expansion macro IntelliSense. Nous avons notamment activé l'expansion récursive dans un plus grand nombre de contextes et ajouté des options à la fenêtre contextuelle pour copier l'expansion dans le presse-papiers ou développer la macro en ligne.

  • La surveillance simultanée est désormais prise en charge dans le moniteur série. La surveillance simultanée vous permet de surveiller plusieurs ports à la fois, côte à côte. Appuyez sur le bouton Plus pour ouvrir un autre moniteur série et commencer à travailler.

  • Vous pouvez désormais visualiser les propriétés des classes de base modifiées dans une ressource Unreal Blueprint sans quitter Visual Studio. Double-cliquez sur une référence de Blueprint pour une classe ou une propriété C++ afin d’ouvrir l'inspecteur de ressources UE dans Visual Studio.

  • Activation de l’exécution de DevContainers sur une machine Linux distante.

  • Sélection de plusieurs cibles à générer dans la vue Cibles CMake.

  • Ajout de la prise en charge de CMakePresets.json version 5. Consultez la documentation CMake pour plus d’informations sur les nouvelles fonctionnalités.

  • Activation de l’Explorateur de tests pour générer et tester plusieurs cibles CMake en parallèle.

  • Ajout de l’option « Ouvrir un conteneur dans le terminal » aux conteneurs de développement.

  • Fonctionnalités de bibliothèque standard implémentées :

    • P2508R1basic_format_string, format_string, wformat_string
    • P2322R6ranges::fold_left, ranges::fold_right, etc.
    • P2321R2views::zip (n’inclut ni zip_transform, niadjacent ni adjacent_transform)

Nouveautés de C++ dans Visual Studio version 17.4

Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans Visual Studio version 17.4, consultez Notes de publication de Visual Studio 2022 version 17.4 et Nouveautés pour les développeurs C++ dans Visual Studio 2022 17.4.

  • Amélioration des messages d’erreur du compilateur pour fournir des informations plus correctes et utiles, en particulier pour les concepts.

  • Ajout de l’option MSVC expérimentale /experimental:log<directory> pour générer des diagnostics SARIF structurés dans le répertoire spécifié.

  • Ajout de la prise en charge des attributs C23 à IntelliSense et progrès dans la prise en charge des modules C++20.

  • Amélioration des performances d’indexation lors de l’ouverture d’une nouvelle solution. Les grands projets pourraient voir une amélioration de 20 à 35 % par rapport à la version 17.3.

  • Amélioration de l’optimisation de la valeur de retour nommée (NRVO) :

    • NRVO est activée pour les cas qui impliquent la gestion d’exceptions ou des boucles.
    • NRVO est activée même sous /Od si l’utilisateur passe l’option /Zc:nrvo, ou /std:c++20 ou ultérieure, ou /permissive-.
    • Vous pouvez désormais désactiver NRVO avec l’option /Zc:nrvo-.
  • Mise à niveau de la version de LLVM fournie avec Visual Studio vers 15.0.1. Pour plus d’informations sur ce qui est disponible, consultez les notes de publication de LLVM et Clang.

  • Ajout de la prise en charge de Visual Studio pour les artefacts vcpkg avec des projets CMake. Pour les projets qui incluent un manifeste vcpkg, l’environnement est activé automatiquement à l’ouverture du projet. Pour en savoir plus sur cette fonctionnalité, consultez le billet de blog vcpkg environment activation in Visual Studio.

  • Vous pouvez désormais utiliser des conteneurs de développement pour vos projets C++. Pour en savoir plus sur cette fonctionnalité, consultez notre billet de blog Dev Containers for C++.

  • IntelliSense respecte désormais l’ordre des en-têtes pré-inclus lorsque l’un d’entre eux est un PCH. Auparavant, lorsqu’un PCH était utilisé via /Yu et inclus de force via /FI, IntelliSense le traitait toujours en premier, avant tout autre en-tête inclus via /FI. Ce comportement ne correspondait pas au comportement de build. Avec cette modification, les en-têtes /FI sont traités dans l’ordre dans lequel ils sont spécifiés.

  • Suppression de préfixes internes des noms CTest dans l’Explorateur de tests.

  • Mise à jour de la version de CMake fournie avec Visual Studio vers la version 3.24.1. Pour plus d’informations sur ce qui est disponible, consultez les Notes de publication de CMake.

  • Mise à jour d’Android SDK :

    • Les scripts Ant ont été supprimés, de sorte que les utilisateurs ne verront plus les modèles Ant dans la boîte de dialogue Nouveau projet. Pour obtenir de l’aide sur la migration de modèles Ant vers des modèles Gradle, consultez Migration de builds à partir d’Apache Ant
    • Ajout de la prise en charge de la génération avec NDK 23 et 24
    • Mise à jour du composant NDK vers le LTS version 23
  • Ajout d’implémentations vectorisées de ranges::min_element(), ranges::max_element() et ranges::minmax_element()

  • Nous continuons à suivre les derniers développements en matière de normalisation C++. La prise en charge de ces fonctionnalités C++23 est disponible en incluant /std:c++latest dans les options de votre compilateur :

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view Le constructeur de plage doit être explicit

    • P0849R8auto(x) : decay-copy dans le langage

      (La partie compilateur n’est pas encore implémentée. La partie bibliothèque a été implémentée en mode C++20 lors de l’implémentation initiale de la prise en charge des plages.)

    • P0881R7<stacktrace>

    • P2301R1 Ajouter un alias de pmr pour std::stacktrace

    • P1328R1constexpr type_info::operator==()

    • P2440R1ranges::iota, ranges::shift_left, ranges::shift_right

    • P2441R2views::join_with

  • Ajout d’une option « Navigation après la création d’une déclaration/définition » pour vous permettre de choisir le comportement de navigation de la fonctionnalité Créer la déclaration/la définition. Vous pouvez choisir entre l’aperçu (par défaut) ou l’ouverture du document, voire aucune navigation.

  • Les builds Arm64 de Visual Studio regroupent désormais les versions Arm64 de CMake et Ninja.

  • Ajout de la prise en charge de CMake Presets version 4. Pour plus d’informations sur ce qui est disponible, consultez les Notes de publication de CMake.

  • Les connexions système à distance utilisant le Gestionnaire de connexions prennent désormais en charge SSH ProxyJump. ProxyJump est utilisé pour accéder à un hôte SSH via un autre hôte SSH (par exemple, pour accéder à un hôte derrière un pare-feu).

Nouveautés de C++ dans Visual Studio version 17.3

Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans Visual Studio version 17.3, consultez Notes de publication de Visual Studio 2022 version 17.3 et Améliorations de C++.

  • La chaîne d’outils Arm64EC n’est plus marquée comme expérimentale. Elle est prête pour être utilisée en production.

  • Le terminal Visual Studio peut désormais être utilisé en tant que client SSH avec vos connexions SSH stockées. Une fois les outils C++ pour Linux installés, ouvrez la fenêtre de l’outil Terminal. La liste déroulante Terminal est remplie avec vos connexions stockées. Lorsque vous sélectionnez une connexion, une nouvelle fenêtre de Terminal s’ouvre dans Visual Studio, qui affiche un pseudo-terminal sur votre système distant. Les caractères de contrôle, les couleurs et la reconnaissance de la position du curseur sont tous pris en charge.

  • Visual Studio peut désormais ajouter des modèles de classe Unreal Engine pour vos projets UE. Pour essayer cette fonctionnalité, vérifiez que Prise en charge de l’IDE pour Unreal Engine est sélectionné dans la charge de travail Développement de jeux en C++ dans Visual Studio Installer. Lorsque vous travaillez sur un projet UE, cliquez avec le bouton droit dans le projet ou un dossier/filtre, puis sélectionnez Ajouter>Classe UE.

  • Atteindre la définition mémorise maintenant la signature précédente et navigue en conséquence lorsqu’une meilleure correspondance n’est pas disponible (par exemple, après que vous avez modifié manuellement la signature de l’une des paires). La réactivité de Atteindre tout a été améliorée. Auparavant, les résultats s’affichaient une fois que vous cessiez de taper. Dans la nouvelle expérience, les résultats s’affichent à mesure que vous tapez.

  • Dans les contextes nécessitant une saisie semi-automatique de type enum (par exemple, affectations à des variables enum, étiquettes de casse, type de enum retournant, etc.), la liste de saisie semi-automatique est désormais filtrée uniquement sur les énumérateurs correspondants et les constructions associées.

  • Ajout de la prise en charge de NuGet PackageReference pour les projets MSBuild C++/CLI ciblant .NET Core. Cette modification a été apportée pour débloquer les bases de code mixtes de la possibilité d’adopter .NET Core. Cette prise en charge ne fonctionne pas pour les autres types de projets C++ ou les types de projets C++ ciblant .NET Framework. Il n’est pas prévu d’étendre la prise en charge de PackageReference à d’autres scénarios C++. L’équipe travaille sur des expériences distinctes impliquant vcpkg, adaptées aux scénarios non MSBuild et offrant une plus grande fonctionnalité.

  • Ajout d’une fenêtre Moniteur série pour le développement incorporé, disponible via Débogage>Windows>Moniteur série.

  • Amélioration de l’indexation C++ d’environ 66 % par rapport à la version 17.2.

  • Mise à jour de la version de CMake fournie avec Visual Studio vers la version 3.23. Pour plus d’informations sur ce qui est disponible, consultez les Notes de publication de CMake 3.23.

  • Mise à niveau des versions des outils LLVM fournis avec Visual Studio vers v14. Pour plus d’informations sur ce qui est disponible, consultez les notes de publication de LLVM et Clang.

  • Mise à jour de l’ensemble d’outils Dev 16.11 C++ côte à côte vers la version 14.29.30145.00. La dernière version de l’ensemble d’outils Dev 16.11 C++ contient des correctifs de bogues importants, dont la correction de tous les rapports de défauts C++20 restants. Pour plus d’informations sur les correctifs de bogues, notamment les rapports de défauts C++20 dans Dev 16.11, consultez les Notes de publication de Visual Studio 2019 version 16.11.14.

  • Nous avons apporté diverses améliorations à l’expérience dans l’éditeur des modules C++. Nous travaillons continuellement à l’amélioration de la qualité de l’expérience, mais vous encourageons à l’essayer dans la version 17.3. Signalez les problèmes restants via Developer Community.

Nouveautés de C++ dans Visual Studio version 17.2

Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans Visual Studio version 17.2, consultez Notes de publication de Visual Studio 2022 version 17.1.

  • Ajout de la prise en charge du compilateur pour la fonctionnalité C++23 déduisant this, disponible sous l’option /std:c++latest.

  • Ajout de la prise en charge d’IntelliSense pour les fonctionnalités C++23 déduisant this et if consteval.

  • Ajout de la prise en charge du nom de paramètre inline et de l’indicateur de type, activé en appuyant sur Alt+F1 ou en appuyant deux fois Ctrl. Ce comportement peut être personnalisé sous Outils > Options > Éditeurs de texte > C/C++ > IntelliSense.

  • Ajout de la prise en charge expérimentale des modules C++20 dans les projets CMake. Cette prise en charge est actuellement disponible uniquement avec le générateur Visual Studio (MSBuild).

  • Dans la version 17.1, nous avons introduit les vues de registre de périphériques et RTOS pour les développeurs incorporés. Nous continuons d’améliorer les fonctionnalités de ces vues avec des améliorations de la facilité d’utilisation dans la version 17.2 :

    • La fenêtre de l’outil RTOS est désormais masquée par défaut. Elle empêche l’affichage d’une fenêtre d’outil avec des messages d’erreur qui ne sont pas pertinents lorsque vous n’utilisez pas de RTOS.
    • Lorsque vous double-cliquez sur un objet RTOS dans la fenêtre d’outil, une montre s’affiche pour l’objet.
    • Lorsque vous sélectionnez les valeurs de début et de fin pour le pointeur de pile dans la fenêtre d’outil RTOS, il s’ouvre dans la fenêtre mémoire.
    • Ajout de la reconnaissance des threads pour les cibles d’appareil à la fenêtre Pile des appels.
    • Les utilisateurs peuvent maintenant sélectionner une icône d’épingle en regard de périphériques, de registres ou de champs pour les épingler en haut de la vue périphérique.
  • Ajout d’implémentations des rapports de défauts C++20 restants (également appelés rétroportages). Toutes les fonctionnalités C++20 sont désormais disponibles sous l’option /std:c++20. Pour plus d’informations sur les rétroportages implémentés, consultez le Projet Rapports de défauts C++20 dans le dépôt GitHub Microsoft/STL et le billet de blog MSVC’s STL Completes /std:c++20.

  • Nous avons ajouté diverses fonctionnalités de bibliothèque C++23, disponibles sous l’option /std:c++latest. Pour plus d’informations sur les nouvelles fonctionnalités, consultez le journal des modifications du référentiel STL.

  • Amélioration des performances de l’indexation C++ initiale jusqu’à 20 %, en fonction de la profondeur du graphique include.

Nouveautés de C++ dans Visual Studio version 17.1

Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans Visual Studio version 17.1, consultez Notes de publication de Visual Studio 2022 version 17.1.

  • Un nouveau modèle Configurer la présélection est ajouté pour configurer et générer des projets CMake sur un système macOS distant avec CMakePresets.json. Vous pouvez également lancer des cibles CMake sur un système macOS distant, puis déboguer à distance dans le débogueur Visual Studio adossé à GDB ou LLDB.
  • Vous pouvez maintenant déboguer des vidages principaux sur un système macOS distant à partir de Visual Studio avec LLDB ou GDB.
  • Les versions de Clang et LLVM livrées avec Visual Studio sont mises à niveau vers v13.
  • L’intégration CMake de Visual Studio n’est active que lorsqu’un CMakeLists.txt est identifié à la racine de l’espace de travail ouvert. Si un CMakeLists.txt est identifié à un autre niveau de l’espace de travail, vous êtes invité à activer l’intégration CMake de Visual Studio avec une notification.
  • Nouvelles vues qui vous permettent d’inspecter et d’interagir avec des registres périphériques sur des microcontrôleurs et des objets RTOS (Real Time Operating Systems), disponibles via Débogage>Windows>Registres intégrés
  • Ajout d’une nouvelle vue de thread pour les projets RTOS, disponible via Déboguer>Windows>Objets RTOS. Pour plus d’informations, consultez Développement logiciel incorporé dans Visual Studio.

Nouveautés de C++ dans Visual Studio version 17.0

Pour obtenir un résumé des nouvelles fonctionnalités et des correctifs de bogues dans Visual Studio, consultez Notes de publication de Visual Studio version 2022 version 17.0.

  • L’IDE Visual Studio, devenv.exe, est désormais une application 64 bits native.

  • L’ensemble d’outils MSVC utilise désormais par défaut le hachage source SHA-256 dans les enregistrements de débogage. Auparavant, l’ensemble d’outils utilisait MD5 pour le hachage source par défaut.

  • Les outils de génération v143 sont désormais disponibles via le programme d’installation de Visual Studio et dans les outils de génération autonomes.

Rechargement à chaud pour C++ natif

  • Le Rechargement à chaud pour C++ permet d’apporter de nombreux types de modifications de code à votre application en cours d’exécution, et de les appliquer sans avoir à interrompre l’exécution de l’application avec quelque chose comme un point d’arrêt.

Dans Visual Studio 2022, lorsque vous démarrez votre application dans le débogueur, vous pouvez utiliser le bouton Rechargement à chaud pour la modifier pendant qu’elle est toujours en cours d’exécution. Cette expérience est optimisée par la fonction native Modifier et continuer. Pour plus d’informations sur les modifications prises en charge, consultez Modifier et Continuer pour (C++).

  • Le Rechargement à chaud prend en charge les projets CMake et Open Folder.

Prise en charge de WSL2

  • Vous pouvez maintenant générer et déboguer en mode natif sur WSL2 sans établir de connexion SSH. Les projets CMake multiplateformes et les projets Linux MSBuild sont pris en charge.

Prise en charge améliorée de CMake

  • Mise à niveau de la version de CMake livrée avec Visual Studio vers la version 3.21. Pour plus d’informations sur ce qui est disponible dans cette version, consultez les Notes de publication de CMake 3.21.

  • Les pages de vue d’ensemble de CMake sont mises à jour pour prendre en charge CMakePresets.json.

  • Vous pouvez maintenant configurer et générer vos projets CMake avec CMake 3.21 et CMakePresets.json v3.

  • Visual Studio prend désormais en charge l’option buildPresets.targets dans CMakePresets.json. Cette option vous permet de créer un sous-ensemble de cibles dans votre projet CMake.

  • Le menu Projet dans les projets CMake est simplifié et expose les options « Supprimer le cache et reconfigurer » et « Afficher le cache ».

  • Implémentation de l’option de compilateur /scanDependencies pour répertorier les dépendances de module C++20 pour les projets CMake, comme décrit dans P1689R5. Il s’agit d’une étape vers la prise en charge de la création de projets basés sur des modules avec CMake, et nous travaillons à finaliser cette prise en charge dans les versions ultérieures.

Améliorations apportées à la bibliothèque standard

Les améliorations de la bibliothèque standard (STL) sont mises en évidence ici. Pour obtenir une liste complète des nouvelles fonctionnalités, des modifications, des correctifs de bogues et des améliorations des performances, consultez le Journal des modifications de l’équipe STL.

  • Ajout de visualiseurs de débogage pour améliorer l’affichage des types suivants : source_location, bind_front(), u8string (et ses itérateurs), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (et son itérateur/sentinelle), ranges::ref_view, thread, thread::id, jthread et filesystem::path
  • Ajout de [[nodiscard]] à la famille de fonctions stoi() dans <string> et à diverses fonctions dans <locale>, telles que les fonctions membres collate, has_facet() et les familles isalnum() et tolower().
  • P0980R1 Réalisé std::stringconstexpr dans VS 2019 16.10. Désormais pris en charge pour Clang.
  • P1004R2 Réalisé std::vectorconstexpr dans VS 2019 16.10. Désormais pris en charge pour Clang.

Fonctionnalités C++23 mises en évidence

  • P1048R1 Ajout de is_scoped_enum, nouvelle caractéristique pour la bibliothèque C++ Standard, qui détecte si un type est une énumération délimitée.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() Pour basic_string et basic_string_view
  • P1682R3to_underlying() pour les énumérations
  • P2162R2 Autoriser l’héritage de std::variant
  • P2166R1 Interdire la construction basic_string et basic_string_view à partir de nullptr. Cette modification est un changement cassant de source. Le code qui avait auparavant un comportement non défini au moment de l’exécution est maintenant rejeté avec des erreurs du compilateur.
  • P2186R2 Suppression de la prise en charge du garbage collection. Cette modification supprime declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Auparavant, ces fonctions n’avaient aucun effet.

Améliorations des performances mises en évidence

  • <format> détecte maintenant lorsqu’il écrit dans un back_insert_iterator pour une basic_string ou un vector, et effectue un appel plus rapide de insert() à la end() du conteneur.
  • Nous avons amélioré les performances de std::find() et std::count() pour vector<bool> 19x et 26x (fois, pas pour cent).
  • Nous avons amélioré les performances de std::count() pour vector<bool>
  • std::byte a maintenant les mêmes performances que unsigned char dans reverse() et variant::swap()

Prise en charge de Clang et LLVM

  • Les outils LLVM fournis avec Visual Studio sont mis à niveau vers LLVM 12. Pour plus d’informations, consultez les Notes de publication de LLVM.

  • La prise en charge de Clang-cl a été mise à jour vers LLVM 12.

  • Vous pouvez maintenant déboguer des processus s’exécutant sur un système distant à partir de Visual Studio en utilisant LLDB.

C++ AMP déconseillé

  • Les en-têtes C++ AMP sont désormais déconseillés. L’inclusion de <amp.h> dans un projet C++ produit des erreurs de génération. Pour ignorer les erreurs, définissez _SILENCE_AMP_DEPRECATION_WARNINGS. Pour plus d’informations, consultez nos liens de dépréciation AMP.

Améliorations d’IntelliSense

  • Nous avons apporté des améliorations à IntelliSense C++ en lien avec la mise en évidence de la navigation et de la syntaxe pour les types à partir de modules et d’unités d’en-tête importés. IntelliSense est pour nous un domaine d’investissement actif. Aidez-nous à nous améliorer : partagez vos commentaires sur Developer Community en sélectionnant Aide>Envoyer des commentaires.

  • Nous avons amélioré les performances d’IntelliSense C++ en optimisant l’utilisation d’en-tête mis en cache et l’accès à la base de données de symboles, ce qui offre de meilleurs temps de chargement pour accéder à votre code.

  • Le Linter de code IntelliSense pour C++ est désormais activé par défaut, fournissant des suggestions instantanées pendant que vous-tapez, et des suggestions de correctif pour les défauts de code courants.

  • IntelliSense C++ pour les projets CMake fonctionne désormais lors de l’utilisation d’une présélection avec un nom d’affichage.

Mises à jour de la charge de travail C++

  • Mise à jour vers NDK r21 LTS dans la charge de travail Développement mobile C++.

  • La charge de travail Développement de jeux avec C++ installe désormais le moteur Unreal le plus récent avec prise en charge de Visual Studio 2022.

Améliorations apportées à l’analyse du code

  • L’analyse du code impose désormais que les valeurs de retour des fonctions annotées avec _Check_return_ ou _Must_inspect_result_ soient vérifiées.

  • La détection de déréférencement du pointeur null est améliorée dans nos outils d’analyse du code.

  • Ajout de la prise en charge de gsl::not_null l’analyse du code.

  • Prise en charge de Libfuzzer sous l’option du compilateur /fsanitize=fuzzer.

Notes de publication pour les versions antérieures

Des notes de publication pour les anciennes versions de C++ sont également disponibles. Pour plus d’informations sur les nouveautés de C++ dans Visual Studio 2019, consultez Nouveautés de C++ dans Visual Studio 2019. Pour plus d’informations sur les nouveautés de C++ dans Visual Studio 2017, consultez Nouveautés de C++ dans Visual Studio 2017. Pour plus d’informations sur les nouveautés des versions antérieures, consultez Visual C++ Nouveautés 2003 à 2015.

Problèmes connus

C++ IntelliSense

Pour plus d’informations sur les autres problèmes ouverts et les solutions de contournement disponibles pour C++ dans Visual Studio 2022, consultez la liste des problèmes de Developer Community C++.

Commentaires et suggestions

Nous sommes à votre écoute. Vous pouvez signaler un problème ou suggérer une fonctionnalité en utilisant l’icône Envoyer des commentaires dans l’angle supérieur droit du programme d’installation ou de l’IDE Visual Studio, ou en sélectionnant Aide>Envoyer des commentaires. Vous pouvez suivre vos problèmes à l’aide de Visual Studio Developer Community, où vous ajoutez des commentaires ou cherchez des solutions. Vous pouvez également obtenir une aide gratuite pour l’installation via notre support Live Chat.

Blogs

Tirez parti des insights et des recommandations disponibles sur le site Microsoft Developer Blogs pour recevoir les dernières mises à jour des versions. Les blogs incluent des billets approfondis sur un vaste éventail de fonctionnalités. Le blog de l’équipe C++ et le blog Visual Studio vous intéresseront particulièrement.