Neuerungen bei C++ in Visual Studio 2022

Visual Studio 2022 bietet viele Updates und Korrekturen an den Microsoft C++-Compiler und -Tools. Die Visual Studio-IDE bietet auch erhebliche Leistungs- und Produktivitätsverbesserungen und wird jetzt nativ als 64-Bit-App ausgeführt.

Neuerungen für C++ in Visual Studio, Version 17.9

Kurzgefasst gehören zu den neuen Features:

  • #includeDiagnose, die eine detaillierte Analyse Ihrer #include Direktiven liefert. Aktivieren Sie dieses Feature, indem Sie mit der rechten Maustaste auf eine #include Direktive klicken und #include Direktive>Diagnose #include aktivieren. #include Darüber befindet sich die Häufigkeit, mit der Ihr Code auf diese #include Datei verweist. Klicken Sie auf den Verweislink, um zu der Stelle zu navigieren, an der Ihr Code etwas aus dieser Headerdatei verwendet. Um die Buildzeit Ihrer #include Direktiven anzuzeigen, führen Sie Build Insights aus, indem Sie zu Build>Build Insights für Lösungsbuild> navigieren.

    Screenshot of #include diagnostics

    Oberhalb des #include ist ein **reference**-Link und eine Reihe der Verweise auf diese #include-Datei (in diesem Fall 1). Die Buildzeit wird ebenfalls aufgeführt (in diesem Fall weniger als 1/2 Sekunde).

  • Visualisierung des Speicherlayouts, die zeigt, wie der Speicher für Ihre Klassen, Strukturen und Vereinigungen angeordnet ist. Zeigen Sie mit der Maus auf einen Typ, und wählen Sie in der Schnellinfo den Link "Speicherlayout" aus, um ein dediziertes Fenster zu öffnen, in dem das Speicherlayout des ausgewählten Typs angezeigt wird. Wenn Sie auf einzelne Datentypen in diesem Fenster zeigen, erhalten Sie detaillierte Informationen über ihre Größe und den Offset innerhalb des Typs.

    Screenshot of the memory layout window

    Das Speicherlayoutfenster zeigt den Inhalt der Schlangenklasse an. Es zeigt die Speicherversätze der verschiedenen Felder der Klasse, z. B. Point-Klassen für die Position des Kopfes und des Textkörpers, des Punktestands usw.

  • Sie können jetzt ihre eigene benutzerdefinierte CMake-Ausführbare Datei angeben. Dieses Feature ist nützlich, wenn Sie eine bestimmte Version von CMake verwenden möchten, die nicht mit Visual Studio ausgeliefert wird. Navigieren Sie zu "Extras>Optionen", und wählen Sie "CMake>Allgemein" aus. Wählen Sie "Benutzerdefinierte ausführbare Datei "CMake aktivieren" aus, und geben Sie den Verzeichnispfad Ihrer ausführbaren Datei "CMake" an.

    Screenshot of the CMake options dialog

    Das Dialogfeld "CMake-Optionen" mit hervorgehobener Option "Benutzerdefiniertes ausführbares CMake-Verzeichnis aktivieren" und "Ausführbares Verzeichnis "CMake".

  • Verbesserte IntelliSense für Unreal Engine-Projekte.
  • Verbesserte C++23-Unterstützung: std::format und std::spanformattable, range_formatformat_kind, und set_debug_format() als Teil der P2286R8 Formatierungsbereiche<mdspan> pro P0009R18 und nachfolgenden Wortänderungen, die auf den C++23 Standard angewendet wurden. format() Außerdem können Zeiger pro P2510R3 formatiert werden.

Eine Zusammenfassung der C++-Back-End-Updates finden Sie unter MSVC-Back-End-Updates seit Visual Studio 2022, Version 17.3.

Eine Zusammenfassung der neuen Features in der Visual Studio 17.9-IDE finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.9.

Neuerungen bei C++ in Visual Studio, Version 17.8

Kurzgefasst gehören zu den neuen Features:

  • C++ strukturierte Diagnose im Ausgabefenster und ein neues Fenster mit Problemdetails, das weitere Informationen zum Fehler bereitstellt. Weitere Informationen finden Sie unter Strukturierte SARIF-Ausgabe und Fenster „Problemdetails“.
  • Ein Feature, mit dem Sie die Größe und Ausrichtung Ihrer Klassen, Strukturen, Vereinigungen, Basistypen oder Enumerationen sogar vor der Kompilierung des Codes visualisieren können. Wenn Sie mit der Maus auf den Bezeichner zeigen, wird ein QuickInfo mit Informationen zur Größe und Ausrichtung angezeigt.
  • Ein Feature, das vorschlägt, wann Memberfunktionen const markiert werden sollen, weil sie den Status des Objekts nicht ändern. Zeigen Sie auf eine Memberfunktion, und klicken Sie auf das Glühbirnensymbol, um die Funktion als const zu markieren.
  • Visual Studio fordert Sie jetzt auf, globale Funktionen über ein Schraubenziehersymbol, das neben dem Funktionsnamen angezeigt wird, als statisch zu markieren. Klicken Sie auf das Schraubenziehersymbol, um die Funktion als statisch zu markieren.
  • Nicht verwendete #include-Anweisungen werden im Editor abgeblendet. Sie können mit dem Mauszeiger auf eine abgeblendete include-Anweisung zeigen und das Glühbirnenmenü verwenden, um die betreffende include-Anweisung oder alle nicht verwendeten include-Anweisungen zu entfernen. Sie können auch Direktiven für Entitäten hinzufügen #include , die indirekt über andere Header enthalten sind. Weitere Informationen finden Sie unter Bereinigen von include-Anweisungen in C/C++ in Visual Studio.
  • Weitere Unreal Engine-Unterstützung:
    • Mit dem Unreal Engine Test Adapter können Sie Ihre Unreal Engine-Tests ermitteln, ausführen, verwalten und debuggen, ohne die IDE von Visual Studio verlassen zu müssen.
    • In den Unreal Engine-Codeschnipseln finden Sie allgemeine Unreal Engine-Konstrukte als Codeschnipsel in Ihrer Memberliste.
    • Build Insights ist jetzt in Visual Studio 2022 integriert und funktioniert mit MSBuild- und CMake-Projekten, die MSVC verwenden. Sie können nun zusätzliche Informationen zur Kompilierung einer Funktion anzeigen, z. B. wie lange das Kompilieren dauerte und die Anzahl der ForceInlines.
  • Mit der Remote-Linux-Komponententestunterstützung können Sie jetzt Ihre CTest- und GTest-Tests genau wie Ihre lokalen Tests auf Ihren Remote-Linux-Computern aus dem Test-Explorer von Visual Studio ausführen.

Eine umfassende Zusammenfassung der neuen C++-Features in Visual Studio 17.8 finden Sie unter Neuerungen für C++-Entwickler*innen in Visual Studio 2022 17.8.

Eine Zusammenfassung der neuen Features in der IDE von Visual Studio 17.8 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.8.

Neuerungen bei C++ in Visual Studio, Version 17.7

Eine Zusammenfassung der neuen C++-Features in Visual Studio 17.7 finden Sie unter Neuerungen für C++-Entwickler in Visual Studio 2022 17.7.

Kurzgefasst gehören zu den neuen Features:

  • Schnellere Debugsitzungen und schnellere Projektladezeiten
  • Schritt-für-Schritt-Visualisierung der Makroerweiterung
  • Ein-Klick-Download für Windows-Subsystem für Linux (WSL)
  • Verbesserter Support für Doxygen-Kommentare
  • C++ Build Insights für die Spieleentwicklung
  • Für den C-Compiler wurde /std:clatest hinzugefügt.
  • Unreal Engine-Projektverbesserungen wie schnelleres IntelliSense und Syntaxeinfärbung, die Möglichkeit, alle Unreal Engine Blueprint-Referenzen zu finden, und mehr.

Eine Zusammenfassung der neuen C++-Features, die für die Spieleentwicklung spezifisch sind, finden Sie unter Entfesseln Sie die Leistungsfähigkeit von Visual Studio 2022 für die C++-Spieleentwicklung

Eine Zusammenfassung der neuen Features in der Visual Studio 17.7 IDE finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.7.

Neuerungen bei C++ in Visual Studio, Version 17.6

Eine Zusammenfassung der neuen C++-Features in Visual Studio 17.6 finden Sie unter Neuerungen für C++-Entwickler in Visual Studio 2022 17.6.

Kurz gesagt, einige der neuen Features sind: CMake Skriptdebugging, integrierte Unterstützung für High Level Shading Language (HLSL), ein Unreal Engine Log Viewer, anfängliche Unterstützung für C++/CLI-Projekte, VCPKG wird jetzt standardmäßig hinzugefügt, und einige C++23-Standardbibliotheksfeatures für Bereiche. Eine vollständige Liste der neuen Features, die der Standardbibliothek hinzugefügt wurden, finden Sie im STL-Änderungsprotokoll.

Eine Zusammenfassung der neuen Features in der Visual Studio 17.6 IDE finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.6.

Neuerungen bei C++ in Visual Studio, Version 17.5

Eine Zusammenfassung der neuen C++-Features in Visual Studio 17.5 finden Sie unter Neuerungen für C++-Entwickler in Visual Studio 2022 17.5. Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio IDE 17.5 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.5.

  • std::move, std::forward, std::move_if_noexcept und std::forward_like erzeugen jetzt keine Funktionsaufrufe im generierten Code, auch nicht im Debugmodus. Diese Änderung vermeidet benannte Umwandlungen, was unnötigen Aufwand in Debugbuilds verursacht. /permissive- (oder eine Option, die dies impliziert, z. B. /std:c++20 oder std:c++latest) ist erforderlich.

  • [[msvc::intrinsic]] wurde zur Unterstützung des obigen Elements hinzugefügt. Sie können dieses Attribut auf nicht rekursive Funktionen anwenden, die aus einer einzelnen Umwandlung bestehen, die nur einen Parameter akzeptiert.

  • Unterstützung für die Linux-Konsole im integrierten Terminal wurde hinzugefügt, die Terminal-E/A ermöglicht.

  • Anfängliche experimentelle Unterstützung für atomische C11-Grundtypen (<stdatomic.h>) wurde hinzugefügt. Sie können dieses experimentelle Feature mit der Option /experimental:c11atomics im Modus /std:c11 oder höher aktivieren.

  • Der Lebensdauerüberprüfung wurden neue experimentelle Überprüfungen mit hoher Konfidenz hinzugefügt, um Stördaten zu reduzieren.

  • Eine neue Previewfunktion, der Remotedatei-Explorer, ermöglicht es Ihnen, das Dateiverzeichnis auf Ihren Remotecomputern innerhalb von VS anzuzeigen und Dateien darin hoch- und herunterzuladen.

  • Die Versionsverwaltung der ausführbaren CMake-Dateien wurde mit Visual Studio an Kitware-Versionen angepasst.

  • Unterstützung für Hot Reload zur CMake-Projektvorlage wurde hinzugefügt.

  • „Gehe zu Definition“ für C++ verwendet jetzt einen subtileren Indikator für den Vorgang, der mehr Zeit in Anspruch nimmt und das modale Dialogfeld aus früheren Versionen ersetzt.

  • Der Rollout eines Experiments wurde begonnen, das weitere intelligente Ergebnisse in der C++-Autovervollständigung und der Memberliste bereitstellt. Diese Funktionalität wurde zuvor als „Predictive IntelliSense“ bezeichnet, verwendet aber jetzt eine neue Präsentationsmethode.

  • Wir versenden nun ein natives Arm64 Clang-Toolset mit unserer LLVM-Workload, sodass die native Kompilierung auf Arm64-Computern möglich ist.

  • Die Lokalisierung wurde zur Image Watch-Erweiterung hinzugefügt (Diese Erweiterung ist im Marketplace verfügbar und wird nicht über den Visual Studio-Installer gebündelt).

  • Es wurde Unterstützung für das Öffnen eines Terminalfensters im derzeit ausgeführten Entwicklercontainer hinzugefügt.

  • Es wurden mehrere Verbesserungen an der IntelliSense-Makroerweiterung vorgenommen. Insbesondere haben wir die rekursive Erweiterung in weiteren Kontexten aktiviert und dem Popupfenster Optionen hinzugefügt, um die Erweiterung in die Zwischenablage zu kopieren oder das Makro inline zu erweitern.

  • Die gleichzeitige Überwachung wird jetzt im seriellen Monitor unterstützt. Die gleichzeitige Überwachung ermöglicht es Ihnen, mehrere Ports gleichzeitig nebeneinander zu überwachen. Drücken Sie die Plustaste, um einen anderen seriellen Monitor zu öffnen und loszulegen.

  • Sie können jetzt Eigenschaften von Basisklassen anzeigen, die in einer Unreal Blueprint-Ressource geändert wurden, ohne Visual Studio zu verlassen. Doppelklicken Sie auf einen Blueprint-Verweis für eine C++-Klasse oder -Eigenschaft, um die UE-Ressourcenprüfung in Visual Studio zu öffnen.

  • Die Ausführung von DevContainers wurde auf einem Linux-Remotecomputer aktiviert.

  • Die Auswahl mehrerer Ziele zum Erstellen in der CMake-Zielansicht wurde aktiviert.

  • Die Unterstützung für CMakePresets.json, Version 5, wurde hinzugefügt. Informationen zu neuen Features finden Sie in der CMake-Dokumentation.

  • Der Test-Explorer wurde zum parallelen Erstellen und Testen mehrerer CMake-Ziele aktiviert.

  • Die Option „Container im Terminal öffnen“ wurde Dev Containers hinzugefügt.

  • Implementierte Standardbibliotheksfeatures:

    • P2508R1basic_format_string, format_string, wformat_string
    • P2322R6ranges::fold_left, ranges::fold_right usw.
    • P2321R2views::zip (enthält nicht zip_transform, adjacent und adjacent_transform)

Neuerungen bei C++ in Visual Studio, Version 17.4

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 17.4 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.4 und unter Neuigkeiten für C++-Entwickler in Visual Studio 2022 17.4.

  • Compilerfehlermeldungen wurden verbessert, um genauere und hilfreichere Informationen bereitzustellen, insbesondere für Konzepte.

  • Die experimentelle MSVC-Option /experimental:log<directory> wurde hinzugefügt, um strukturierte SARIF-Diagnosen in das angegebene Verzeichnis auszugeben.

  • Unterstützung für C23-Attribute wurde zu IntelliSense hinzugefügt und es wurden weitere Fortschritte bei der Unterstützung von C++20-Modulen gemacht.

  • Die Indizierungsleistung beim Öffnen einer neuen Projektmappe wurde verbessert. Für große Projekte könnte eine Verbesserung von 20-35 % gegenüber 17.3 erreicht werden.

  • Verbesserte Optimierung von benannten Rückgabewerten (NRVO, Named Return Value Optimization):

    • NRVO ist für Fälle aktiviert, die Ausnahmebehandlungen oder Schleifen umfassen.
    • NRVO ist auch unter /Od aktiviert, wenn Benutzer die /Zc:nrvo-Option oder /std:c++20 oder höher oder /permissive- übergeben.
    • Sie können jetzt NRVO mit der Option /Zc:nrvo- deaktivieren.
  • Für die Version von LLVM, die mit Visual Studio ausgeliefert wird, wurde ein Upgrade auf 15.0.1 durchgeführt. In den Versionshinweisen zu LLVM und Clang finden Sie weitere Informationen zu den verfügbaren Optionen.

  • Für Visual Studio wurde Unterstützung für vcpkg-Artefakte mit CMake-Projekten hinzugefügt. Bei Projekten, die ein vcpkg-Manifest enthalten, wird die Umgebung beim Öffnen des Projekts automatisch aktiviert. Weitere Informationen zu diesem Feature finden Sie im Blogbeitrag zur Aktivierung der vcpkg-Umgebung in Visual Studio.

  • Sie können jetzt Dev-Container für Ihre C++-Projekte verwenden. Weitere Informationen zu diesem Feature finden Sie in unserem Blogbeitrag Dev-Container für C++.

  • IntelliSense beachtet jetzt die Reihenfolge der vorab einbezogenen Header, wenn einer davon ein PCH ist. Wenn früher ein PCH über /Yu verwendet und über /FI zwangsweise einbezogen wurde, hat IntelliSense diesen immer zuerst verarbeitet, bevor andere Header über /FI einbezogen wurden. Dieses Verhalten entspricht nicht dem Buildverhalten. Mit dieser Änderung werden /FI-Header in der Reihenfolge verarbeitet, in der sie angegeben werden.

  • Interne Präfixe wurden aus den CTest-Namen im Test Explorer entfernt.

  • Die mit Visual Studio ausgelieferte Version von CMake wurde auf Version 3.24.1 aktualisiert. Details zu den verfügbaren Features finden Sie in den Versionshinweisen zu CMake.

  • Android SDK-Update:

    • Ant-Skripts wurden entfernt, sodass Benutzer*innen keine Ant-basierten Vorlagen mehr im Dialogfeld „Neues Projekt“ sehen werden. Hilfe bei der Migration von Ant-Vorlagen zu Gradle-Vorlagen finden Sie unter Migrating Builds From Apache Ant (Migrieren von Builds aus Apache Ant).
    • Unterstützung für das Erstellen mit NDK 23 und 24 wurde hinzugefügt
    • NDK-Komponente wurde auf die LTS-Version 23 aktualisiert
  • Vektorisierte Implementierungen von ranges::min_element(), ranges::max_element() und ranges::minmax_element() wurden hinzugefügt

  • Wir verfolgen weiterhin die neuesten Entwicklungen hinsichtlich der C++-Standardisierung. Die Unterstützung für diese C++23-Features ist verfügbar, wenn Sie /std:c++latest in Ihren Compileroptionen einschließen:

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view-Bereichskonstruktor sollte explicit sein

    • P0849R8auto(x): „decay-copy“ in der Sprache

      (Der Compilerteil ist noch nicht implementiert; der Bibliotheksteil wurde im C++20-Modus implementiert, als die Unterstützung für Bereiche ursprünglich implementiert wurde.)

    • P0881R7<stacktrace>

    • P2301R1pmr-Alias für std::stacktrace hinzufügen

    • P1328R1constexpr type_info::operator==()

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

    • P2441R2views::join_with

  • Es wurde eine Option „Navigation nach Erstellung von Deklaration/Definition“ hinzugefügt, mit der Sie das Navigationsverhalten des Features „Deklaration/Definition erstellen“ auswählen können. Sie können zwischen dem Einsehen (Standardeinstellung) oder dem Öffnen des Dokuments bzw. keiner Navigation wählen.

  • Arm64-Builds von Visual Studio bündeln jetzt die Arm64-Versionen von CMake und Ninja.

  • Unterstützung für CMake Presets Version 4 wurde hinzugefügt. Details zu den verfügbaren Features finden Sie in den Versionshinweisen zu CMake.

  • Remotesystemverbindungen mit dem Verbindungs-Manager unterstützen jetzt SSH ProxyJump. ProxyJump wird verwendet, um über einen SSH-Host auf einen anderen SSH-Host zuzugreifen (z. B. auf einen Host hinter einer Firewall).

Neuerungen bei C++ in Visual Studio, Version 17.3

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 17.3 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.3 und unter C++-Verbesserungen.

  • Die Arm64EC-Toolkette wird nicht mehr als experimentell gekennzeichnet und ist bereit für die Verwendung in der Produktionsumgebung.

  • Das Visual Studio-Terminal kann jetzt als SSH-Client mit Ihren gespeicherten SSH-Verbindungen verwendet werden. Öffnen Sie bei installierten „C++ für Linux“-Tools das Toolfenster „Terminal“. Die Dropdownliste „Terminal“ wird mit Ihren gespeicherten Verbindungen gefüllt. Wenn Sie eine Verbindung auswählen, wird ein neues Terminalfenster in Visual Studio geöffnet, in dem ein Pseudoterminal auf Ihrem Remotesystem angezeigt wird. Steuerzeichen, Farben und Cursorpositionsbewusstsein werden unterstützt.

  • Visual Studio kann jetzt Unreal Engine-Klassenvorlagen für Ihre UE-Projekte hinzufügen. Um dieses Feature zu testen, stellen Sie sicher, dass IDE-Unterstützung für Unreal Engine im Visual Studio-Installer in der Workload Spieleentwicklung mit C++ ausgewählt ist. Wenn Sie an einem UE-Projekt arbeiten, klicken Sie mit der rechten Maustaste im Projekt oder auf einen Ordner/Filter und wählen Hinzufügen>UE-Klasse aus.

  • Gehe zu Definition merkt sich jetzt die vorherige Signatur und navigiert entsprechend, wenn keine bessere Übereinstimmung verfügbar ist (z. B. nachdem Sie die Signatur eines der Paare manuell geändert haben). Die Reaktionsfähigkeit von Gehe zu allen wird verbessert. Zuvor wurden die Ergebnisse angezeigt, nachdem Sie die Eingabe beendet haben. In der neuen Umgebung werden die Ergebnisse während der Eingabe angezeigt.

  • In Kontexten, die eine Vervollständigung des enum-Typs erfordern (z. B. Zuweisungen an enum-Variablen, case-Bezeichnungen, Rückgabe des enum-Typs usw.), wird die Liste für die automatische Vervollständigung jetzt hinsichtlich der passenden Enumeratoren und zugehörigen Konstrukte gefiltert.

  • NuGet PackageReference-Unterstützung wurde für C++/CLI MSBuild-Projekte hinzugefügt, die auf .NET Core ausgerichtet sind. Diese Änderung wurde vorgenommen, um die Blockierung gemischter Codebasen hinsichtlich der Übernahme von .NET Core aufzuheben. Diese Unterstützung funktioniert nicht für andere C++-Projekttypen oder C++-Projekttypen, die auf .NET Framework ausgerichtet sind. Es gibt keine Pläne, PackageReference-Unterstützung auf andere C++-Szenarien auszudehnen. Das Team arbeitet an separaten Erfahrungen mit vcpkg für Nicht-MSBuild-Szenarien und um weitere Funktionen hinzuzufügen.

  • Es wurde das Fenster „Serieller Monitor“ für die eingebettete Entwicklung hinzugefügt, das über Debuggen>Windows>Serieller Monitor verfügbar ist.

  • Verbesserte C++-Indizierung um ~66 % im Vergleich zu 17.2.

  • Die mit Visual Studio ausgelieferte Version von CMake wurde auf Version 3.23 aktualisiert. Details zu den verfügbaren Funktionen finden Sie in den Versionshinweisen zu CMake 3.23.

  • Für die Versionen von LLVM-Tools, die mit Visual Studio ausgeliefert werden, wurde ein Upgrade auf v14 durchgeführt. In den Versionshinweisen zu LLVM und Clang finden Sie Einzelheiten zu den verfügbaren Optionen.

  • Das parallele Dev 16.11 C++-Toolset wurde auf Version 14.29.30145.00 aktualisiert. Die neueste Version des Dev 16.11 C++-Toolsets enthält wichtige Fehlerkorrekturen, einschließlich der Behebung aller verbleibenden C++20-Fehlerberichte. Weitere Informationen zu Fehlerkorrekturen, einschließlich C++20-Fehlerberichten in Dev 16.11, finden Sie in den Versionshinweisen zu Visual Studio 2019, Version 16.11.14.

  • Es wurden verschiedene Verbesserungen an der Benutzeroberfläche im Editor für C++-Module vorgenommen. Wir arbeiten kontinuierlich daran, die Qualität der Umgebung zu verbessern, aber ermutigen Sie, 17.3 zu testen. Melden Sie verbleibende Probleme über die Entwicklercommunity.

Neuerungen bei C++ in Visual Studio, Version 17.2

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 17.2 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.1.

  • Zusätzliche Compilerunterstützung für das C++23-Feature abgeleitet vonthis, verfügbar unter der /std:c++latest-Option.

  • Zusätzliche IntelliSense-Unterstützung für die C++23-Features abgeleitet this von und if consteval.

  • Zusätzlicher Inlineparametername und Unterstützung zu Eingabehinweisen. Lässt sich umschalten durch Drücken von Alt+F1 oder Doppeltippen von STRG. Dieses Verhalten kann unter Tools > Optionen > Text-Editoren > C/C++ > IntelliSense angepasst werden.

  • Experimentelle Unterstützung für C++20-Module in CMake-Projekten wurde hinzugefügt. Diese Unterstützung ist derzeit nur mit dem Visual Studio (MSBuild)-Generator verfügbar.

  • In 17.1 haben wir periphere Register-und RTOS-Ansichten für eingebettete Entwickler eingeführt. Wir verbessern weiterhin die Funktionen dieser Ansichten mit Ntzbarkeitsverbesserungen in 17.2:

    • Das RTOS-Toolfenster ist jetzt standardmäßig ausgeblendet. Es verhindert, dass ein Toolfenster mit Fehlermeldungen angezeigt wird, die nicht relevant sind, wenn Sie kein RTOS verwenden.
    • Wenn Benutzer*innen im Toolfenster auf ein RTOS-Objekt doppelklicken, wird ein Überwachungselement für das Objekt hinzugefügt.
    • Wenn Sie die Start- und Endwerte für den Stapelzeiger im RTOS-Toolfenster auswählen, wird er im Speicherfenster geöffnet.
    • Es wurde Threadbewusstsein für Geräteziele zum Anrufstapelfenster hinzugefügt.
    • Benutzer können jetzt neben Peripheriegeräten, Registern oder Feldern auf ein Stecknadelsymbol klicken, um sie oben in der Peripherieansicht anzuheften.
  • Es wurden Implementierungen der verbleibenden C++20-Fehlerberichte (auch als Backports bezeichnet) hinzugefügt. Alle C++20-Features sind jetzt unter der /std:c++20-Option verfügbar. Weitere Informationen zu den implementierten Backports finden Sie im C++20 Fehlerberichtprojekt im Microsoft/STL-GitHub-Repository und im MSVC STL Completes /std:c++20-Blogeintrag.

  • Es wurden verschiedene C++23 Library -Funktionen hinzugefügt, die unter der /std:c++latest-Option verfügbar sind. Weitere Informationen zu den neuen Features finden Sie im STL Repo-Änderungsprotokoll.

  • Verbesserte Leistung der anfänglichen C++-Indizierung um bis zu 20 %, je nach Tiefe des einschließenden Diagramms.

Neuerungen bei C++ in Visual Studio, Version 17.1

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 17.1 finden Sie in den Versionshinweisen zu Visual Studio 2022, Version 17.1.

  • Eine neue Vorlage zum Konfigurieren der Voreinstellungen wird hinzugefügt, um CMake-Projekte auf einem macOS-Remotesystem mit CMakePresets.json zu konfigurieren und zu erstellen. Sie können CMake-Ziele auch auf einem macOS-Remotesystem starten und dann mit remote mithilfe des Visual Studio-Debuggers debuggen, der von GDB oder LLDB unterstützt wird.
  • Sie können jetzt Kernspeicherabbilder auf einem macOS-Remotesystem über Visual Studio mit LLDB oder GDB debuggen.
  • Die mit Visual Studio ausgelieferten Versionen von Clang und LLVM werden auf v13 upgegradet.
  • Die CMake-Integration von Visual Studio wird nur aktiviert, wenn im Stammverzeichnis des geöffneten Arbeitsbereichs eine CMakeLists.txt-Datei gefunden wird. Wenn eine CMakeLists.txt-Datei auf einer anderen Ebene des Arbeitsbereichs identifiziert wird, werden Sie durch eine Benachrichtigung aufgefordert, die CMake-Integration von Visual Studio zu aktivieren.
  • Neue Ansichten, mit denen Sie Peripherieregister auf Mikrocontrollern und RTOS-Objekten (Real Time Operating Systems) prüfen und mit ihnen interagieren können. Verfügbar über Debuggen>Windows>Eingebettete Register
  • Eine neue Threadansicht für RTOS-Projekte wurde hinzugefügt, die über Debuggen>Windows>RTOS-Objekte verfügbar ist. Weitere Informationen finden Sie unter Eingebettete Softwareentwicklung in Visual Studio.

Neuerungen bei C++ in Visual Studio Version 17.0

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio finden Sie in den Versionshinweisen zu Visual Studio 2022, 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

  • Für 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 aktualisiert, sodass sie CMakePresets.json unterstützen.

  • 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 enthält die Optionen „Cache löschen und neu konfigurieren“ und „Cache anzeigen“.

  • Die Compileroption /scanDependencies wurde implementiert, um wie in P1689R5 beschrieben die 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: In VS 2019 16.10 wurde std::stringconstexpr eingeführt. Wird jetzt für Clang unterstützt.
  • P1004R2: In VS 2019 16.10 wurde std::vectorconstexpr eingeführt. Wird jetzt für Clang unterstützt.

Erwähnenswerte Features für C++23

  • P1048R1: Das Merkmal is_scoped_enum wurde zur C++-Standardbibliothek hinzugefügt. Es erkennt, ob es sich bei einem Typ um eine Enumeration mit eigenem Gültigkeitsbereich handelt.
  • P1132R7: out_ptr(), inout_ptr()
  • P1679R3: contains() für basic_string und basic_string_view
  • P1682R3: to_underlying() für Enumerationen
  • P2162R2: Erben von std::variant möglich
  • P2166R1: Es kann verhindert werden, dass basic_string und basic_string_view aus nullptr erstellt werden. Diese Änderung ist ein Breaking Change der Quelle. Code mit vorher nicht definiertem Verhalten wird zur Laufzeit jetzt mit Compilerfehlern abgelehnt.
  • P2186R2: Die Unterstützung für die Garbage Collection wurde entfernt. Durch diese Änderung werden 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 werden 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 bei der Verbesserung: Teilen Sie Ihr Feedback zur Entwicklercommunity mithilfe von Hilfe>Feedback senden mit.

  • 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-Zeigerdereferenzierungen wurde in den Codeanalysetools 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. Weitere Informationen zu Neuerungen für C++ in Visual Studio 2019 finden Sie unter Neuerungen bei C++ in Visual Studio. Weitere Informationen zu Neuerungen für C++ in Visual Studio 2017 finden Sie unter Neuerungen für C++ in Visual Studio 2017. Weitere 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 nutzen oder Hilfe>Feedback senden 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 Erkenntnisse und Empfehlungen, die Sie auf der Website Microsoft Developer Blogs finden, um über alle neuen Versionen auf dem Laufenden zu bleiben. Die Blogs enthalten spezialisierte Beiträge zu einer Vielzahl von Features. Die Bereiche C++ Team Blog und Visual Studio Blog sind von besonderem Interesse.