Neuerungen bei C++ in Visual Studio 2022

Visual Studio 2022 enthält viele Updates und Fixes für die C++-Umgebung von Microsoft. Es wurden Features hinzugefügt und zahlreiche Fehler und Probleme mit dem Compiler sowie mit Tools behoben. Die Visual Studio-IDE bietet auch erhebliche Leistungs- und Produktivitätsverbesserungen und wird jetzt nativ als 64-Bit-App ausgeführt. Weitere Informationen zu Neuerungen in Visual Studio finden Sie unter Neuerungen in Visual Studio 2022. Weitere Informationen zu den Neuerungen in der C++-Dokumentation finden Sie unter Microsoft C++-Dokumentation: Neuigkeiten.

Neuerungen bei C++ in Visual Studio Version 17.0

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 2022 finden Sie unter Neuerungen in Visual Studio Version 17.0.

  • Die Visual Studio-IDE, devenv.exe , ist jetzt eine native 64-Bit-App.

  • Das MSVC-Toolset verwendet jetzt standardmäßig SHA-256-Quellhashing n Debugdatensätzen. Zuvor verwendete das Toolset standardmäßig MD5 für das Quellhashing.

  • Die v143-Buildtools sind jetzt über das Visual Studio-Installationsprogramm sowie über die eigenständigen Buildtools verfügbar.

Hot Reload für native C++-Programmiersprache

  • Mit Hot Reload für C++ können viele verschiedene Codebearbeitungen an laufenden Apps vorgenommen werden, ohne dass die Ausführung der App durch einen Breakpoint oder Ähnliches unterbrochen werden muss.

Wenn Sie ihre App in Visual Studio 2022 im Debugger starten, können Sie die Schaltfläche „Hot Reload“ verwenden, um Ihre Anwendung zu bearbeiten, während sie ausgeführt wird. Diese Funktion wird durch das native Feature „Bearbeiten und fortfahren“ unterstützt. Weitere Informationen zu unterstützten Bearbeitungen finden Sie unter Bearbeiten und fortfahren (C++).

  • Hot Reload unterstützt CMake-Projekte und Projekte, bei denen „Ordner öffnen“ verwendet wird.

WSL2-Unterstützung

  • Das Kompilieren und Debuggen kann jetzt nativ unter WSL2 erfolgen, ohne dass eine SSH-Verbindung hergestellt wird. Sowohl plattformübergreifende CMake-Projekte als auch MSBuild-basierte Linux-Projekte werden unterstützt.

Verbesserte CMake-Unterstützung

  • Auf die in Visual Studio enthaltene Version von CMake wurde ein Upgrade auf Version 3.21 ausgeführt. Weitere Informationen zu dieser Version finden Sie in den Versionshinweisen zu CMake 3.21.

  • CMake-Übersichtsseiten wurden für die Unterstützung von CMakePresets.json aktualisiert.

  • Sie können ihre CMake-Projekte jetzt mit CMake 3.21 und CMakePresets.json V3 konfigurieren und erstellen.

  • Visual Studio unterstützt jetzt die Option buildPresets.targets in CMakePresets.json . Mit dieser Option können Sie eine Teilmenge von Zielen in Ihrem CMake-Projekt erstellen.

  • Das Menü „Projekt“ in CMake-Projekten wurde optimiert und umfasst die Optionen „Cache löschen und neu konfigurieren“ und „Cache anzeigen“.

  • Die Compileroption /scanDependencies wurde implementiert, um wie in /scanDependencies beschrieben C++20-Modulabhängigkeiten für CMake-Projekte aufzulisten. Dies ist ein Schritt hin zur Unterstützung der Erstellung modulbasierter Projekte mit CMake, und es wird daran gearbeitet, diese Unterstützung in späteren Versionen zu vervollständigen.

Verbesserungen der Standardbibliothek

Ausgewählte Verbesserungen an der Standardbibliothek (STL) werden hier hervorgehoben. Eine vollständige Liste der neuen Funktionalitäten, Änderungen, Fehlerkorrekturen und Leistungsverbesserungen finden Sie im Änderungsprotokoll des STL-Teams.

  • Es wurden Debuggingschnellansichten hinzugefügt, um die Darstellung der folgenden Typen zu verbessern: source_location, bind_front(), u8string (einschließlich Iteratoren), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (einschließlich Iterator/Sentinel), ranges::ref_view, thread, thread::id, jthread und filesystem::path.
  • [[nodiscard]] wurde zur Familie der stoi()-Funktionen in <string> und zu verschiedenen Funktionen in <locale> hinzugefügt, zum Beispiel collate-Memberfunktionen, has_facet() und den isalnum()- und tolower()-Funktionsfamilien.
  • P0980R1 Erstellt constexpr in VS 2019 16.10. Dies wird nun auch für Clang unterstützt.
  • P1004R2 Erstellt constexpr in VS 2019 16.10. Dies wird nun auch für Clang unterstützt.

Erwähnenswerte Features für C++23

  • P1048R1 Wurde hinzugefügt, ein neues Merkmal für die C++-Standardbibliothek, das erkennt, ob ein Typ eine Bereichsenumeration ist.
  • P1132R7 ,inout_ptr()
  • P1679R3 Für basic_string undbasic_string_view
  • P1682R3 für Enumerationen
  • P2162R2 Erben von zulassen
  • P2166R1 Verhindern Sie das Erstellen von und basic_string_view aus nullptr . Dabei handelt es sich um einen Source Breaking Change. Code mit nicht definiertem Verhalten zur Laufzeit wird jetzt mit Compilerfehlern abgelehnt.
  • P2186R2: Die Unterstützung für die Garbage Collection wurde entfernt. Dadurch werden auch declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers und get_pointer_safety entfernt. Diese Funktionen waren zuvor ohne Wirkung.

Erwähnenswerte Leistungsverbesserungen

  • <format> erkennt jetzt, wenn für basic_string oder vector in back_insert_iterator geschrieben wird. Außerdem erfolgt der Aufruf von insert() bei der end()-Funktion des Containers schneller.
  • Die Leistung von std::find() und std::count() für vector<bool> wurde um das 19- bzw. 26-Fache verbessert.
  • Die Leistung von std::count() für vector<bool> wurde verbessert.
  • std::byte ist nun genauso leistungsfähig wie unsigned char in reverse() und variant::swap().

Clang- und LLVM-Unterstützung

  • Die mit Visual Studio ausgelieferten LLVM-Tools wurden auf LLVM 12 aktualisiert. Weitere Informationen finden Sie in den Versionshinweisen zu LLVM.

  • Die Clang-cl-Unterstützung wurde auf LLVM 12 aktualisiert.

  • Sie können jetzt Prozesse, die auf einem Remotesystem von Visual Studio ausgeführt werden, mit LLDB debuggen.

C++ AMP veraltet

  • C++ AMP-Header gelten jetzt als veraltet. Das Einschließen von <amp.h> in ein C++-Projekt generiert Buildfehler. Definieren Sie _SILENCE_AMP_DEPRECATION_WARNINGS, um die Fehler auszublenden. Weitere Informationen finden Sie unter den Links zum Lebensende des AMP.

IntelliSense-Optimierungen

  • Es wurden Verbesserungen an C++-IntelliSense beim Bereitstellen von Navigations- und Syntaxhervorhebungen für Typen aus importierten Modulen und Headereinheiten durchgeführt. IntelliSense ist ein aktiver Investitionsbereich. Helfen Sie uns bei der Verbesserung: Teilen Sie Ihr Feedback zu Developer Community mithilfevon Help Send Feedback.

  • Verbesserte C++-IntelliSense-Leistung durch Optimieren der Verwendung von zwischengespeicherten Headern und des Zugriffs auf Symboldatenbanken und in der Folge verbesserte Ladezeiten beim Zugriff auf Ihren Code.

  • Der IntelliSense-Code-Linter für C++ ist jetzt standardmäßig aktiviert und unterbreitet sofort Vorschläge bei der Eingabe und Korrekturvorschläge für häufige Codefehler.

  • C++-IntelliSense für CMake-Projekte funktioniert jetzt, wenn eine Voreinstellung mit einem Anzeigenamen verwendet wird.

Updates an C++-Workloads

  • Aktualisierung auf NDK r21 LTS in der Workload Visual C++ Mobile-Entwicklung

  • Die Workload Spieleentwicklung mit C++ installiert jetzt die neueste Unreal Engine mit Unterstützung für Visual Studio 2022.

Verbesserungen bei der Codeanalyse

  • Die Codeanalyse erzwingt jetzt, dass Rückgabewerte von Funktionen, die mit _Check_return_ oder _Must_inspect_result_ kommentiert sind, überprüft werden müssen.

  • Die Erkennung von NULL-Zeigerdereferenzierung in den Codeanalysetools wurde verbessert.

  • Unterstützung für gsl::not_null zur Codeanalyse hinzugefügt.

  • Unterstützung für Libfuzzer unter der Compileroption /fsanitize=fuzzer

Versionshinweise für ältere Versionen

Versionshinweise für ältere C++-Versionen sind ebenfalls verfügbar. Informationen zu neuerungen bei C++ in Visual Studio 2019 finden Sie unter Neuerungen bei C++ in Visual Studio 2019. Informationen zu neuerungen bei C++ in Visual Studio 2017 finden Sie unter Neuerungen bei C++ in Visual Studio 2017. Informationen zu Neuerungen in früheren Versionen finden Sie unter Visual C++ Neuerungen von 2003 bis 2015.

Bekannte Probleme

IntelliSense für C++

Informationen zu weiteren ungelösten Problemen und verfügbaren Problemumgehungen für C++ in Visual Studio 2022 finden Sie in der Problemliste der C++-Entwicklercommunity.

Feedback und Vorschläge

Wir freuen uns darauf, von Ihnen zu hören. Sie können ein Problem melden oder ein Feature vorschlagen, indem Sie das Symbol Feedback senden in der oberen rechten Ecke des Installationsprogramms oder der Visual Studio-IDE oder über Hilfe zumSenden von Feedback verwenden. Sie können Ihre Probleme in der Entwicklercommunity für Visual Studio nachverfolgen, in der Sie Kommentare hinzufügen und Lösungen suchen können. Über unseren Livechatsupport erhalten Sie zudem kostenlose Hilfe bei der Installation.

Blogs

Nutzen Sie die Einblicke und Empfehlungen auf der Seite der Microsoft-Entwicklerblogs. Sie halten Sie über alle neuen Releases auf dem Laufenden. Die Blogs enthalten spezialisierte Beiträge zu einer Vielzahl von Features. Der C++-Teamblog und der Visual Studio Blog sind vermutlich besonders interessant für Sie.