Neuerungen bei C++ in Visual Studio 2019

Visual Studio 2019 enthält viele Updates und Fixes für die C++-Umgebung von Microsoft. Es wurden zahlreiche Fehler und Probleme mit dem Compiler sowie mit Tools behoben. Viele Probleme wurden von Kunden über die Optionen Problem melden und Vorschlag senden unter Feedback senden übermittelt. Vielen Dank für das Melden von Fehlern!

Weitere Informationen zu Neuerungen in Visual Studio finden Sie unter Neuerungen in Visual Studio 2019. 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 für C++ in Visual Studio 2015 und frühere Versionen finden Sie unter Visual C++: Neuerungen von 2003 bis 2015. Weitere Informationen finden Sie unter Microsoft C++-Dokumentation: Neuerungen.

Neuerungen bei C++ in Visual Studio, Version 16.11

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.11 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.11.

  • Der Compiler unterstützt jetzt den /std:c++20-Compilermodus. Zuvor waren C++20-Features nur im /std:c++latest-Modus in Visual Studio 2019 verfügbar. Features, für die ursprünglich der /std:c++latest -Modus erforderlich war, funktionieren nun im /std:c++20 -Modus oder in den neuesten Versionen von Visual Studio.

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

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

Neuerungen bei C++ in Visual Studio, Version 16.10

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.10 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.10.

  • Alle C++20-Features sind nun unter /std:c++latest verfügbar. Während die MSVC-Implementierung der C++20-Standards (wie derzeit von der ISO veröffentlicht) bezüglich der Features abgeschlossen ist, werden einige wichtige C++20-Bibliotheksfeatures durch bevorstehende Fehlerberichte (ISO C++20-Fehlerbehebungen) ergänzt, die sie möglicherweise in einer ABI-inkompatiblen Weise ändern. Weitere Informationen finden Sie unter Microsoft/STL-Problem 1814.

    • C++20-Sofortfunktionen und Konstinit-Unterstützung in 16.10 hinzugefügt
    • Die letzten Teile von <chrono>: neue Uhren, Schaltsekunden, Zeitzonen und Analyse
    • Implementierung von <format> für die Textformatierung
  • /openmp:llvm ist jetzt zusätzlich zu x64 unter x86 und ARM64 verfügbar

  • Include-Verzeichnisse können jetzt als extern mit benutzerdefinierten Kompilierungswarnungsstufen und Codeanalyseeinstellungen festgelegt werden.

  • Die /await:strict-Option wurde hinzugefügt, um Co-Routinen im C++20-Stil in früheren Sprachmodi zu aktivieren.

  • Die Debugger-Visualisierung von std::coroutine_handle<T> zeigt jetzt den ursprünglichen Co-Routine-Funktionsnamen und die Signatur sowie den aktuellen Haltepunkt an.

  • Unterstützung für CMakePresets wurde hinzugefügt.

  • Beim Hinzufügen einer neuen Remoteverbindung in Visual Studio müssen Sie den Fingerabdruck des Hostschlüssels, der vom Server angezeigt wird, annehmen oder ablehnen.

  • Hinzufügen eines /external-Schalters zu MSVC, um Header zu spezifizieren, die zu Warnzwecken als extern behandelt werden sollten.

Neuerungen bei C++ in Visual Studio, Version 16.9

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.9 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.9.

  • Address Sanitizer:

    • Unsere Unterstützung für Address Sanitizer unter Windows ist nicht mehr im experimentellen Modus und befindet sich in der allgemeinen Verfügbarkeit.

    • Die Unterstützung für RtlAllocateHeap wurde erweitert, und ein Problem in den Interceptors RtlCreateHeap und RtlAllocateHeap wurde behoben, das beim Erstellen von ausführbaren Speicherpools entstand.

    • Unterstützung für die Legacy-Speicherfunktionsfamilie GlobalAlloc und LocalAlloc wurde hinzugefügt. Sie können diese Interceptors durch Festlegen des Umgebungsflags ASAN_OPTIONS=windows_hook_legacy_allocators=true aktivieren.

    • Fehlermeldungen für Fehler bei Schattenspeicher-Interleaving und Abfangen wurden aktualisiert, um Probleme und Auflösungen zu verdeutlichen.

    • Die IDE-Integration kann nun die komplette Sammlung von Ausnahmen verarbeiten, die ASan berichten kann.

    • Compiler und Linker schlagen die Ausgabe von Debuginformationen vor, wenn sie erkennen, dass Sie ASan zum Erstellen verwenden, aber keine Debuginformationen ausgeben.

  • Sie können jetzt das Ziel der LLVM-Version der OpenMP-Runtime mit der neuen CL-Befehlszeilenoption /openmp:llvm angeben. Damit wird Unterstützung für die Klausel lastprivate in #pragma omp-Abschnitten und für nicht signierte Indexvariablen in parallelen for-Schleifen hinzugefügt. Die Befehlszeilenoption /openmp:llvm ist zurzeit nur für das amd64-Ziel verfügbar und befindet sich noch in der experimentellen Phase.

  • CMake-Projekte von Visual Studio bieten jetzt erstklassige Unterstützung für die Remote-Windows-Entwicklung. Dies umfasst das Konfigurieren eines CMake-Projekts für Windows ARM64, das Bereitstellen des Projekts für einen Remote-Windows-Computer und das Debuggen des Projekts auf einem Windows-Remote Computer von Visual Studio aus.

  • Die mit Visual Studio unter Windows ausgelieferte Ninja-Version wurde auf 1.10 aktualisiert. Weitere Informationen zum Lieferumfang finden Sie in den Versionshinweisen zu Ninja 1.10.

  • Die mit Visual Studio ausgelieferte CMake-Version wurde auf 3.19 aktualisiert. Weitere Informationen zum Lieferumfang finden Sie in den Versionshinweisen zu CMake 3.19.

  • In STL wurden viele Sperr-/Wächtertypen als nodiscard gekennzeichnet.

  • IntelliSense:

  • MSVC bestimmt nun die korrekten Address Sanitizer-Runtimes, die für Ihre Binärdateien erforderlich sind. Die Änderungen werden für Ihr Visual Studio-Projekt automatisch übernommen. Bei Verwendung von Address Sanitizer über die Befehlszeile müssen Sie lediglich /fsanitize=address an den Compiler übergeben.

  • Der Verbindungs-Manager von Visual Studio unterstützt ab sofort private Schlüssel mit dem öffentlichen ECDSA-Schlüsselalgorithmus.

  • Die Versionen für LLVM und Clang wurde im Installationsprogramm auf Version 11 aktualisiert. Lesen Sie die Versionshinweise für LLVM und Clang, um weitere Informationen zu erhalten.

  • Visual Studio nutzt ab sofort CMake-Variablen aus Toolkettendateien, um IntelliSense zu konfigurieren. Dies führt zu einer besseren Servicequalität für eingebettete Entwicklung und Android-Entwicklung.

  • Implementierung des Vorschlags für weitere Constexpr-Container, der Destruktoren und neue Ausdrücke als constexpr ermöglicht. Dies ebnet den Weg für Hilfsprogramme wie constexprstd::vector und std::string.

  • Erweiterte Unterstützung für IntelliSense für C++20-Module, einschließlich „Gehe zu Definition“, „Gehe zu Modul“ und Membervervollständigung.

  • Abgekürzte Funktionsvorlagen werden nun im MSVC-Compiler unterstützt.

Neuerungen bei C++ in Visual Studio, Version 16.8

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.8 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.8.

  • C++20-Coroutinen werden jetzt unter /std:c++latest (oder /std:c++20 ab Visual Studio 2019 Version 16.11) und dem <coroutine>-Header unterstützt.

  • IntelliSense bietet jetzt Unterstützung für <concepts>- und <ranges>-Header für C++ 20 sowie zum Umbenennen und Durchsuchen von Konzeptdefinitionen.

  • Unser STL-Format unterstützt nun einen Großteil der C++ 20-Bereiche.

  • Bedingt triviale besondere Memberfunktionen werden jetzt in MSVC unterstützt.

  • C11 und C17 werden jetzt in den Befehlszeilenoptionen /std:c11 und /std:c17 unterstützt.

  • Weitere STL-Verbesserungen: vollständige Unterstützung für std::atomic_ref, std::midpoint, std::lerp und std::execution::unseq, Optimierungen für std::reverse_copy und vieles mehr.

  • Aktualisierte Version CMake 3.18 der in Visual Studio enthaltenen Version von CMake.

  • Unsere Codeanalysetools unterstützen jetzt den SARIF 2.1-Standard – das Standardprotokollformat für die statische Analyse.

  • Fehlende Buildtools in Linux-Projekten geben nun eine Warnung in der Symbolleiste und eine klare Beschreibung der fehlenden Tools in der Fehlerliste aus.

  • Sie können jetzt Linux-Kernspeicherabbildungen auf einem Linux-Remotesystem oder einem WSL direkt in Visual Studio debuggen.

  • Für die Kommentarerstellung für C++ Doxygen haben wir weitere Kommentarformatoptionen hinzugefügt (/*! und //!).

  • Weitere Ankündigungen für vcpkg.

  • Compilerunterstützung für Lambdas in nicht ausgewerteten Kontexten.

  • /DEBUG:FULL-Linkleistung wurde durch Multithreading-PDB-Erstellung verbessert. Für mehrere große Anwendungen und AAA-Spiele zwischen 2 und 4 Mal schnelleres Linking.

  • Der Visual Studio-Debugger bietet jetzt Unterstützung für char8_t .

  • Unterstützung für ARM64-Projekte mit clang-cl.

  • Unterstützung für Intel AMX-Interna.

Neuerungen bei C++ in Visual Studio, Version 16.7

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.7 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.7.

  • Unsere Remoteunterstützung für C++ umfasst jetzt mehr Linux-Distributionen und Shells, einschließlich sh, csh, bash, tsch, ksh, zsh und dash. Sie können die Auswahl einer Shell für eine Remoteverbindung überschreiben, indem Sie die neue Shelleigenschaft über „ConnectionManager.exe“ ändern. Diese Unterstützung wurde sowohl mit MSBuild-basierten Linux-Projekten als auch mit CMake-Projekten getestet, die auf ein Linux-Remotesystem oder WSL ausgerichtet sind.

  • Sie können jetzt Ninja verwenden (ein Buildsystem, das inkrementelle Builds sehr schnell evaluiert), um inkrementelle Buildzeiten für MSBuild-basierte Linux-Projekte zu optimieren. Sie können dieses Feature aktivieren, indem Sie auf der Eigenschaftenseite „Allgemein“ für die Option „Inkrementelle Builds aktivieren“ „With Ninja“ (Mit Ninja) festlegen. Ninja (ninja-build) muss auf Ihrem Linux-Remotesystem oder WSL installiert sein.

  • Neue Funktionen der C++20-Standardbibliothek wurden implementiert. Eine ausführliche Liste finden Sie im STL-Änderungsprotokoll auf GitHub.

  • Sie können nun SSH-Standardremoteverbindungen im Verbindungs-Manager bearbeiten und festlegen. Das bedeutet, dass Sie eine vorhandene Remoteverbindung bearbeiten (z. B. wenn sich die IP-Adresse geändert hat) und zu verwendende Standardverbindungen in „CMakeSettings.json“ und „launch.vs.json“ festlegen können. SSH-Remoteverbindungen ermöglichen es Ihnen, C++ Projekte direkt aus Visual Studio in einem Linux-Remotesystem zu erstellen und zu debuggen.

  • Verbesserte IntelliSense-Unterstützung für Clang unter Windows (clang-cl) in Visual Studio. Der Clang-Includepfad enthält jetzt die Clang-Bibliotheken. Wir haben die Wellenlinienanzeige im Editor verbessert, wenn die std-Bibliothek verwendet wird, und wir haben Unterstützung für C++2a im Clang-Modus hinzugefügt.

  • Sie können nun das Unterstreichen von Codefehlern ausprobieren und weitere vorgeschlagene Schnellkorrekturen in C++-Projekten entdecken. Aktivieren Sie dieses Feature unter Tools > Optionen > Text-Editor > C/C++ > Experimentell. Legen Sie Experimentellen Codelinter deaktivieren auf FALSE fest. Weitere Informationen finden Sie im C++-Teamblog.

  • Wir haben vier neue Codeanalyseregeln hinzugefügt, um zusätzliche Sicherheitsfunktionen in C++ zu integrieren: C26817, C26818, C26819 und C26820.

  • Wir haben erstklassige Unterstützung für das Debuggen von CMake-Projekten auf Remotesystemen mit gdbserver hinzugefügt.

  • Sie können Speicherbeschädigungsfehler mit einer experimentellen Implementierung von AddressSanitizer für C++ in Visual Studio einfach ermitteln, die jetzt für native x64-Projekte verfügbar ist. Wir unterstützen jetzt auch die Verwendung von Debugruntimes (/MTd, /MDd, /LDd).

  • IntelliSense bietet jetzt grundlegende Unterstützung für Konzepte, festgelegte Initialisierer und andere C++20-Features.

  • .ixx - und .cppm -Dateien werden jetzt als C++-Dateien erkannt und von der Syntaxhervorhebung und IntelliSense als solche behandelt.

Neuerungen bei C++ in Visual Studio, Version 16.6

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.6 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.6.

  • Verbesserte Doxygen-/XML-Kommentargenerierung: Generieren Sie Doxygen- oder XML-Dokumentationskommentarstubs automatisch durch Eingeben von /// oder /** oberhalb von Funktionen. Diese werden jetzt auch in QuickInfos angezeigt.

  • Ninja-Unterstützung für CMake für Linux/WSL: Verwenden Sie Ninja als zugrundeliegenden Generator, wenn Sie CMake-Projekte in WSL oder einem Remotesystem erstellen. Ninja ist nun der Standardgenerator beim Hinzufügen einer neuen Linux- oder WSL-Konfiguration.

  • Debuggen von Vorlagen für das Remote-CMake-Debuggen: Wir haben die Vorlagen für das Debuggen von CMake-Projekten über ein Remotesystem mit Linux oder WSL mit gdb vereinfacht.

  • Erste Unterstützung für C++ 20-Konzepte: IntelliSense erkennt nun C++ 20-Konzepte und schlägt diese in der Memberliste vor.

Neuerungen bei C++ in Visual Studio, Version 16.5

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.5 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.5.

  • Unterstützung für Modell- und Membervariablen von IntelliCode-Teamvervollständigungen: C++-Entwickler können jetzt IntelliCode-Modelle in ihren eigenen Codebasen trainieren. Wir nennen dies ein Modell für Teamvervollständigungen, da Sie von den praktischen Erfahrungen Ihres Teams profitieren. Zusätzlich erhalten Sie nun bessere IntelliCode-Vorschläge für Membervariablen.

  • IntelliSense-Optimierungen:

    • IntelliSense zeigt jetzt besser lesbare Typnamen an, wenn die Standardbibliothek verwendet wird.
    • Sie können jetzt umschalten, ob die EINGABETASTE, die LEERTASTE oder die TAB-TASTE als Commitzeichen fungiert und ob die TAB-TASTE zum Einfügen von Codeausschnitten verwendet werden soll. Diese Einstellungen befinden sich unter Tools > Optionen > Text-Editor > C/C++ > Erweitert > IntelliSense.
  • Verbindungs-Manager über die Befehlszeile: Sie können jetzt über die Befehlszeile mit Ihren gespeicherten Remoteverbindungen interagieren. Dieses Feature ist besonders nützlich für Aufgaben wie die Bereitstellung eines neuen Entwicklungscomputers oder die Einrichtung von Visual Studio in Continuous Integration.

  • Debuggen und Bereitstellen für WSL: Verwenden Sie die native Unterstützung von Visual Studio für WSL, um Ihr Buildsystem von Ihrem Remotebereitstellungssystem zu trennen. Jetzt können Sie nativ auf WSL kompilieren und die Buildartefakte zum Debuggen auf einem zweiten Remotesystem bereitstellen. Dieser Workflow wird von CMake-Projekten und MSBuild-basierten Linux-Projekten unterstützt.

  • Unterstützung für den FIPS 140-2-Konformitätsmodus: Visual Studio unterstützt jetzt den FIPS 140-2-Konformitätsmodus bei der Entwicklung von C++-Anwendungen für ein Linux-Remotesystem.

  • Sprachdienste für CMake-Sprachdateien und verbesserte Bearbeitung von CMake-Projekten:

    • Das Kopieren von Quelldateien für CMake-Projekte für ein Linux-Remotesystem wurde optimiert. Visual Studio speichert jetzt eine „Fingerabdruckdatei“ der letzten remote kopierten Quellen und optimiert das Verhalten anhand der Anzahl der geänderten Dateien.

    • Features für die Navigation durch den Code wie „Gehe zu Definition“ und „Alle Verweise suchen“ werden jetzt für Funktionen, Variablen und Ziele in CMake-Skriptdateien unterstützt.

    • Quelldateien und Ziele in ihren CMake-Projekten lassen sich nun über die IDE hinzufügen, entfernen und umbenennen, ohne dass Sie Ihre CMake-Skripts manuell bearbeiten müssen. Wenn Sie Dateien über den Projektmappen-Explorer hinzufügen oder entfernen, bearbeitet Visual Studio automatisch Ihr CMake-Projekt. Sie können die Ziele des Projekts auch in der Ansicht „Ziele“ des Projektmappen-Explorers hinzufügen, entfernen und umbenennen.

  • Verbesserungen für Linux-Projekte: Visual Studio-Linux-Projekte verfügen jetzt über präziseres IntelliSense und ermöglichen die Steuerung der Remoteheadersynchronisierung auf Projektbasis.

Neuerungen bei C++ in Visual Studio, Version 16.4

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.4 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.4.

  • Code Analysis unterstützt jetzt Clang-Tidy für MSBuild- und CMake-Projekte nativ, unabhängig davon, ob Sie ein Clang- oder MSVC-Toolset verwenden. clang-tidy-Überprüfungen können im Rahmen der Hintergrund-Codeanalyse ausgeführt, als Warnungen im Editor (Wellenlinien) angezeigt und in der Fehlerliste aufgeführt werden.

  • In Visual Studio-CMake-Projekten sind jetzt Übersichtsseiten vorhanden, die Sie bei der plattformübergreifenden Entwicklung unterstützen. Diese Seiten sind dynamisch und erleichtern die Herstellung einer Verbindung mit einem Linux-System und ermöglichen das Hinzufügen einer Linux- oder WSL-Konfiguration zu Ihrem CMake-Projekt.

  • Das Startdropdownmenü für CMake-Projekte zeigt jetzt die zuletzt verwendeten Ziele an und kann gefiltert werden.

  • C++/CLI unterstützt jetzt die Interoperation mit .NET Core 3.1 und höher unter Windows.

  • Sie können jetzt ASan für Projekte aktivieren, die mit MSVC unter Windows kompiliert wurden, um die Laufzeitinstrumentierung von C++-Code zu ermöglichen und Arbeitsspeicherfehler zu ermitteln.

  • Updates für die C++-Standardbibliothek von MSVC:

    • C++17: Allgemeine Genauigkeit für to_chars() zur Vervollständigung von „P0067R5 Elementary String Conversions (charconv) (elementare Zeichenfolgenkonvertierungen)“ implementiert. Damit ist die Implementierung aller Bibliotheksfunktionen in C++17 Standard abgeschlossen.
    • C++20: „P1754R1 Rename concepts to standard_case (Konzepte zur Umbenennung in Standardschreibung)“ implementiert. Verwenden Sie zum Einschließen dieser Features die Compileroption /std:c++latest (oder /std:c++20 ab Visual Studio 2019 Version 16.11). Diese Option kann auch auf der Eigenschaftenseite des Projekts unter Konfigurationseigenschaften > C/C++ > Sprache mithilfe der Eigenschaft C++-Sprachstandard festgelegt werden.
  • Eine neue Sammlung von Tools namens C++ Build Insights ist jetzt verfügbar. Weitere Informationen zur Ankündigung finden Sie im C++-Teamblog.

Neuerungen bei C++ in Visual Studio, Version 16.3

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.3 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.3.

  • C++-Entwickler können Zeilenkommentare jetzt mit den Tastenkombinationen STRG+K und STRG+/ aktivieren bzw. deaktivieren.

  • IntelliSense-Memberlisten können jetzt nach Typqualifizierern gefiltert werden, beispielsweise filtert const std::vector jetzt Methoden wie push_back heraus.

  • Wir haben die folgenden C++20-Standardbibliotheksfeatures hinzugefügt (verfügbar unter /std:c++latest oder /std:c++20 ab Visual Studio 2019 Version 16.11):

    • P0487R1: Korrektur von operator>>(basic_istream&, CharT*)
    • P0616R0: Verwenden von move() in <numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: C++-Erweiterungen für Konzepte
    • P0898R3: Standardbibliothekskonzepte
    • P0919R3: Heterogenes Nachschlagen für unsortierte Container
  • Neue C++ Core-Richtlinienprüfungen, einschließlich des neuen Regelsatzes „Enumerationsregeln“ sowie zusätzlicher Regeln für const, enum und Typen.

  • Anhand eines neuen semantischen Standardfarbschemas erlangen Benutzer auf einen Blick ein besseres Verständnis ihres Codes, das Aufruflistenfenster kann so konfiguriert werden, dass Vorlagenargumente ausgeblendet werden, und C++-IntelliCode ist standardmäßig aktiviert.

  • Konfigurieren Sie Debugziele und benutzerdefinierte Tasks mit Umgebungsvariablen unter Verwendung von CMakeSettings.json oder CppProperties.json oder mit dem neuen Tag „env“ für einzelne Ziele und Tasks in „launch.vs.json“ und „tasks.vs.json“.

  • Benutzer können nun eine Schnellaktion bei fehlenden vcpkg-Paketen ausführen, und es wird automatisch eine Konsole geöffnet und eine vcpkg-Standardinstallation installiert.

  • Der von Linux-Projekten (CMake und MSBuild) ausgeführte Kopiervorgang von Remoteheadern wurde optimiert und wird nun parallel ausgeführt.

  • Die native Unterstützung von WSL in Visual Studio umfasst nun auch die Unterstützung paralleler Builds für MSBuild-basierte Linux-Projekte.

  • Benutzer können jetzt eine Liste lokaler Buildausgaben angeben, die in einem Remotesystem mit Linux Makefile-Projekten bereitgestellt werden sollen.

  • Die Beschreibungen der Einstellungen im CMake-Einstellungs-Editor bieten nun mehr Kontext und enthalten Links zu hilfreicher Dokumentation.

  • Das C++-Basismodell für IntelliCode ist jetzt standardmäßig aktiviert. Sie können diese Einstellung ändern, indem Sie zu Extras>Optionen>IntelliCode wechseln.

Neuerungen bei C++ in Visual Studio, Version 16.2

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.2 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.2.

  • Für lokale CMake-Projekte, die mit Clang konfiguriert wurden, führt die Codeanalyse nun Clang-Tidy-Überprüfungen durch, die als Teil der Hintergrundcodeanalyse als Warnungen (Wellenlinien) im Editor und in der Fehlerliste angezeigt werden.

  • <charconv>-Header für P0067R5 (elementare Zeichenfolgenkonvertierungen) von C++ 17 aktualisiert:

    • to_chars()-Überladungen mit Gleitkomma für Genauigkeit von chars_format::fixed und chars_format::scientific hinzugefügt (nur chars_format::general precision wurde noch nicht implementiert)
    • chars_format::fixed optimiert (kürzeste Darstellung)
  • Folgende C++20-Standardbibliotheksfeatures wurden hinzugefügt:

    • Verfügbar unter /std:c++latest (oder /std:c++20 ab Visual Studio 2019 Version 16.11):
      • P0020R6:atomic<floating-point>
      • P0463R1: Endian-Enumeration
      • P0482R6:char8_t-Typ für UTF-8-Zeichen und -Zeichenfolgen
      • P0653R2:to_address() zum Konvertieren eines Zeigers in einen Rohzeiger
    • Verfügbar unter /std:c++17 und /std:c++latest (oder /std:c++20 ab Visual Studio 2019 Version 16.11):
      • P0600R1:[[nodiscard]] in der Bibliothek
    • Verfügbar ohne Bedingung:
      • P0754R2:<version>-Header
      • P0771R1: Bewegungskonstruktor von std::function muss noexcept sein
  • Das Windows SDK ist für die Komponenten CMake für Windows und CMake für Linux keine Abhängigkeit mehr.

  • Verbesserungen am C++-Linker zur erheblichen Verbesserung der Iterationsbuildzeit für die umfangreichsten Eingaben. /DEBUG:FAST und /INCREMENTAL sind jetzt im Durchschnitt doppelt so schnell, /DEBUG:FULL ist jetzt drei- bis sechsmal schneller.

Neuerungen bei C++ in Visual Studio, Version 16.1

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.1 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.1.

C++-Compiler

  • Die folgenden C++20-Features wurden im C++-Compiler implementiert und sind unter /std:c++latest (oder /std:c++20 ab Visual Studio 2019 Version 16.11): verfügbar:

    • Die Möglichkeit, Funktionsvorlagen über argumentbezogene Suchen nach Funktionsaufrufausdrücken zu suchen, wurde mit expliziten Vorlagenargumenten erweitert (P0846R0).
    • Die designierte Initialisierung (P0329R4) ermöglicht, dass bestimmte Member in der Aggregatinitialisierung ausgewählt werden können, z. B. mithilfe der Syntax Type t { .member = expr }.
  • Die Lambdaunterstützung wurde überholt und dabei viele schon lang bestehende Fehler behoben. Diese Änderung ist bei Verwendung von /std:c++20 oder /std:c++latest standardmäßig aktiviert. Im /std:c++17 -Sprachmodus und im Standardmodus ( /std:c++14 ) kann der neue Parser mithilfe von /Zc:lambda in Visual Studio 2019 Version 16.9 oder höher aktiviert werden (zuvor verfügbar als /experimental:newLambdaProcessor ab Visual Studio 2019 Version 16.3). Beispiel: /std:c++17 /Zc:lambda

Verbesserungen der C++-Standardbibliothek

  • Die folgenden C++20-Features wurden unserer Implementierung der C++-Standardbibliothek hinzugefügt und sind unter /std:c++latest verfügbar:
    • starts_with und ends_with für basic_string und basic_string_view.
    • contains für assoziative Container.
    • remove, remove_if und unique für list und forward_list geben nun size_type zurück.
    • shift_left und shift_right wurden <algorithm> hinzugefügt.

C++-IDE

IntelliCode für C++

IntelliCode ist jetzt als optionale Komponente in der Workload Desktopentwicklung mit C++ enthalten. Weitere Informationen finden Sie unter Improved C++ IntelliCode now Ships with Visual Studio 2019 (Verbesserter C++ IntelliCode ist jetzt in Visual Studio 2019 enthalten).

IntelliCode nutzt umfassendes eigenes Training und Ihren Codekontext, um Codeelemente, die Sie wahrscheinlich verwenden, am Anfang der Vervollständigungsliste anzuzeigen. Dadurch müssen Sie oft nicht in der Liste nach unten scrollen. IntelliCode eignet sich für C++ insbesondere dann, wenn häufig eingesetzte Bibliotheken wie die Standardbibliothek verwendet werden.

Die neuen IntelliCode-Features (benutzerdefinierte Modelle, C++-Unterstützung und EditorConfig-Rückschlüsse) sind standardmäßig deaktiviert. Navigieren Sie zu Tools > Optionen > IntelliCode > Allgemein, um sie zu aktivieren. Diese IntelliCode-Version ist noch genauer und beinhaltet Unterstützung für freie Funktionen. Weitere Informationen finden Sie unter AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode (IntelliCode stellt für C++ KI-gestützte Codevervollständigungsvorschläge bereit).

Verbesserungen bei QuickInfos

  • Für die QuickInfo wird jetzt die semantische Farbgebung Ihres Editors berücksichtigt. Außerdem verfügt sie über den neuen Link Online suchen, mit dem nach Onlinedokumentation gesucht werden kann, um mehr Informationen zum jeweiligen Codekonstrukt zu erhalten. Über den Link in der QuickInfo, der für rot unterschlängelten Code angezeigt wird, kann online nach dem Fehler gesucht werden. Auf diese Weise müssen Sie die Nachricht nicht erneut in Ihren Browser eingeben. Weitere Informationen finden Sie unter Quick Info Improvements in Visual Studio 2019: Colorization and Search Online (QuickInfo-Verbesserungen in Visual Studio 2019: Farbgebung und Onlinesuche).

Allgemeine Verbesserungen

  • Die Vorlagenleiste kann das Dropdownmenü nun auf Grundlage der Instanziierungen dieser Vorlage in Ihrer Codebasis auffüllen.

  • Glühbirnensymbole für fehlende #include-Anweisungen, die von vcpkg installiert werden können, und automatische Vervollständigung verfügbarer Pakete für die CMake-Anweisung find_package.

  • Die Eigenschaftenseite Allgemein für C++-Projekte wurde überarbeitet. Einige Optionen werden jetzt auf der neuen Seite Erweitert aufgeführt. Die Seite Erweitert beinhaltet auch neue Eigenschaften für Ihre bevorzugte Toolsetarchitektur, Debugbibliotheken, die Nebenversion des MSVC-Toolsets und Unity-Builds (Jumbo).

CMake-Unterstützung

  • Die mit Visual Studio gelieferte CMake-Version wurde auf 3.14 aktualisiert. Diese Version fügt integrierte Unterstützung für MSBuild-Generatoren, die Visual Studio 2019-Projekte unterstützen, sowie dateibasierte APIs für die IDE-Integration hinzu.

  • Der Editor für CMake-Einstellungen wurde verbessert, einschließlich Unterstützung für das Windows-Subsystem für Linux (WSL) und Konfigurationen aus vorhandenen Caches. Die Standardstammverzeichnisse für Builds und Installationen wurden geändert. Umgebungsvariablen in Linux-CMake-Konfigurationen werden nun unterstützt.

  • Vervollständigungen und QuickInfos für integrierte Befehle, Variablen und Eigenschaften von CMake erleichtern die Bearbeitung Ihrer CMakeLists.txt -Dateien.

  • Wir haben Unterstützung für die Bearbeitung, die Erstellung und das Debugging von CMake-Projekten mit Clang/LLVM integriert. Weitere Informationen finden Sie unter Clang/LLVM Support in Visual Studio (Clang/LLVM-Unterstützung in Visual Studio).

Linux und das Windows-Subsystem für Linux

Codeanalyse

Remotebuilds

  • Benutzer können nun Remotebuildcomputer von Remotedebugcomputern trennen, wenn Sie für Linux entwickeln (wird für MSBuild- und CMake-Projekte unterstützt).

  • Die verbesserte Protokollierung für Remoteverbindungen erleichtert die Fehlerdiagnose bei der plattformübergreifenden Entwicklung.

Neuerungen bei C++ in Visual Studio, Version 16.0

Eine Zusammenfassung der neuen Features und Fehlerbehebungen in Visual Studio 16.0 finden Sie unter Neuerungen in Visual Studio 2019, Version 16.0.

C++-Compiler

  • Verbesserte Unterstützung für C++17-Features und Korrekturen der Genauigkeit sowie experimentelle Unterstützung für C++20-Features wie Module und Coroutinen. Ausführliche Informationen finden Sie unter C++ Conformance Improvements in Visual Studio 2019 (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2019).

  • Die Option /std:c++latest schließt nun C++20-Features ein, deren Entwicklung möglicherweise noch nicht abgeschlossen ist. Hierzu gehört beispielsweise die Unterstützung des C++20-Operators <=>> („Spaceship“) für Dreifachvergleiche.

  • Die C++-Compileroption /Gm ist nun veraltet. Es empfiehlt sich, die /Gm-Option in Buildskripts zu deaktivieren, wenn sie explizit festgelegt wurde. Sie können die Warnung für die veraltete Option allerdings auch für /Gm ignorieren, da sie bei Verwendung der Einstellung „Warnungen als Fehler behandeln“ (/WX) nicht als Fehler behandelt wird.

  • Da für MSVC mit der Implementierung der Features aus dem C++20-Standardentwurf unter dem Flag /std:c++latest begonnen wurde, ist /std:c++latest jetzt mit /clr (alle Arten), /ZW und /Gm inkompatibel. Verwenden Sie in Visual Studio 2019 den Modus /std:c++17 oder /std:c++14 beim Kompilieren mit /clr, /ZW oder /Gm (siehe vorheriger Aufzählungspunkt).

  • Vorkompilierte Header werden nicht mehr standardmäßig für C++-Konsolen- und -Desktop-Apps generiert.

Codegenerierung, Sicherheit, Diagnosen und Versionsverwaltung

Die Analyse mit /Qspectre zur Unterstützung bei der Entschärfung für die Spectre-Variante 1 (CVE-2017-5753) wurde verbessert. Weitere Informationen finden Sie unter Spectre Mitigations in MSVC (Spectre-Entschärfungen in MSVC).

Verbesserungen der C++-Standardbibliothek

  • Implementierung von zusätzlichen C++17- und C++20-Bibliotheksfeatures und Korrekturen der Genauigkeit. Ausführliche Informationen finden Sie unter C++ Conformance Improvements in Visual Studio 2019 (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2019).

  • Das Clang-Format wurde zur besseren Lesbarkeit auf die Header der C++-Standardbibliothek angewendet.

  • Da Visual Studio jetzt „Nur eigenen Code“ für C++ unterstützt, muss die Standardbibliothek keine benutzerdefinierten Komponenten für std::function und std::visit mehr bereitstellen, um den gleichen Effekt zu erzielen. Die Entfernung dieser Komponenten hat im Allgemeinen keine für Benutzer sichtbare Auswirkung. Eine Ausnahme ist jedoch, dass der Compiler keine Diagnose zum Angeben von Problemen in Zeile 15732480 oder 16707566 von <type_traits> oder <variant> mehr durchführt.

Verbesserungen in Bezug auf Leistung/Durchsatz im Compiler und in der Standardbibliothek

  • Der Durchsatz für Builds wurde verbessert. Zu den Optimierungen gehören unter anderem der Umgang des Linkers mit E/A-Vorgängen für Dateien und die Linkzeit beim Zusammenführen und Erstellen von PDB-Typen.

  • Die OpenMP-SIMD-Vektorisierung wird nun grundlegend unterstützt. Sie können sie mit dem neuen Compilerschalter /openmp:experimental aktivieren. Wenn diese Option festgelegt ist, werden Schleifen mit der Anmerkung #pragma omp simd möglicherweise vektorisiert. Die Vektorisierung wird allerdings nicht garantiert. Für Schleifen, die mit einer Anmerkung versehen sind, aber nicht vektorisiert werden, wird eine Warnung ausgegeben. SIMD-Klauseln werden nicht unterstützt. Sie werden ignoriert, und es wird eine Warnung angezeigt.

  • Die neue Inlining-Befehlszeilenoption /Ob3 wurde hinzugefügt. Diese führt im Vergleich zur /Ob2-Version mehr Inliningvorgänge aus. /O2 (Binärdateioptimierung für höhere Geschwindigkeit) impliziert weiterhin standardmäßig /Ob2. Wenn Sie feststellen, dass der Compiler nicht genug Inliningvorgänge ausführt, sollten Sie /O2 -Ob3 verwenden.

  • Intrinsische Funktionen der Short Vector Math Library (SVML) werden nun unterstützt. Diese Funktionen berechnen die Entsprechungen von 128-, 256- oder 512-Bit-Vektoren. Dadurch werden die manuelle Vektorisierung von Schleifen mit Aufrufen für mathematische Bibliotheksfunktionen und bestimmte andere Operationen wie Ganzzahldivisionen ermöglicht. Definitionen der unterstützten Funktionen finden Sie im Intel Intrinsics Guide.

  • Neue und verbesserte Optimierungen:

    • Auswertung von Ausdrücken, die zur Kompilierzeit in Konstanten umgewandelt werden können (Constant Folding), und arithmetische Vereinfachungen für Ausdrücke mit intrinsischen SIMD-Vektorfunktionen für Float- und Integerformen

    • Leistungsfähigere Analyse zum Extrahieren von Informationen aus der Ablaufsteuerung (if/else/switch-Anweisungen), um Zweige zu entfernen, für die feststeht, dass sie immer TRUE oder FALSE sind

    • Verbesserte memset-Auflösung zur Verwendung von SSE2-Vektoranweisungen

    • Verbessertes Entfernen von nutzlosen struct/class-Kopien, insbesondere für C++-Programme, in denen Übergaben nach Wert erfolgen

    • Verbesserte Optimierung von Code mithilfe von memmove, z. B. im Fall von std::copy oder bei der Erstellung von std::vector- und std::string-Objekten

  • Optimierung des physischen Designs der Standardbibliothek, um zu vermeiden, dass Teile der Standardbibliothek, die nicht direkt enthalten sind, kompiliert werden. Diese Änderung verkürzte die Erstellungszeit einer leeren Datei, die nur <vector> enthält, um die Hälfte. Daher müssen Sie ggf. #include-Anweisungen für Header hinzufügen, die zuvor indirekt eingebunden waren. Beispielsweise muss bei Code, der std::out_of_range verwendet, jetzt ggf. #include <stdexcept> hinzugefügt werden. Bei Code, für den ein Operator zum Einfügen eines Datenstroms verwendet wird, muss jetzt ggf. #include <ostream> hinzugefügt werden. Der Vorteil besteht darin, dass nur für Übersetzungseinheiten, in denen tatsächlich <stdexcept>- oder <ostream>-Komponenten verwendet werden, der Durchsatzaufwand für die Kompilierung anfällt.

  • if constexpr wurde in der Standardbibliothek an mehr Stellen angewendet, um für Kopiervorgänge einen besseren Durchsatz und eine geringere Codegröße zu erzielen, sowie in Permutationen wie Umkehrung und Drehung und in der Bibliothek mit den parallelen Algorithmen.

  • In der Standardbibliothek wird intern jetzt if constexpr verwendet, um die Kompilierzeiten zu reduzieren (auch im C ++14-Modus).

  • Bei der Erkennung von dynamischen Verknüpfungen zur Laufzeit für die Bibliothek mit den parallelen Algorithmen wird nicht mehr eine gesamte Seite genutzt, um das Funktionszeigerarray zu speichern. Die Kennzeichnung dieses Speichers als schreibgeschützt wurde als nicht mehr relevant für die Sicherheit angesehen.

  • Der Konstruktor std::thread wartet nicht mehr darauf, dass der Thread startet, und fügt zwischen der zugrunde liegenden C-Bibliothek _beginthreadex und dem angegebenen aufrufbaren Objekt nicht mehr so viele Funktionsaufrufe ein. Bisher wurden von std::thread sechs Funktionen zwischen _beginthreadex und dem angegebenen aufrufbaren Objekt eingefügt. Diese Zahl wurde auf drei reduziert (zwei davon sind lediglich std::invoke). Darüber hinaus wird mit dieser Änderung ein rätselhafter Zeitsteuerungsfehler behoben, bei dem ein Konstruktor von std::thread hängt, wenn die Systemuhr genau während der Erstellung eines std::thread-Elements geändert wird.

  • Es wurde ein Leistungsverlust in std::hash behoben, der sich aus der Implementierung von std::hash<std::filesystem::path> ergeben hat.

  • An mehreren Stellen der Standardbibliothek werden anstelle von catch-Blöcken jetzt Destruktoren verwendet, um Korrektheit zu erzielen. Dies führt zu einer besseren Interaktion mit dem Debugger: Ausnahmen, die über die Standardbibliothek an den betroffenen Orten auftreten, werden jetzt so angezeigt, dass sie am ursprünglichen Auslösungsort ausgelöst wurden (anstatt durch unseren Rethrow-Vorgang). Nicht alle catch-Blöcke der Standardbibliothek wurden beseitigt. Wir gehen davon aus, dass die Anzahl von catch-Blöcken in späteren Releases von MSVC weiter reduziert wird.

  • Die suboptimale Codegenerierung in std::bitset durch eine bedingte Auslösung in einer noexcept-Funktion wurde behoben, indem der Auslösepfad ausgeklammert wurde.

  • Für die std::list- und std::unordered_*-Familie werden Iteratoren ohne Debugging intern an mehr Stellen verwendet.

  • Mehrere std::list-Member wurden geändert, um, soweit möglich, Listenknoten wiederzuverwenden, anstatt hierfür die Zuordnung aufzuheben und diese dann erneut durchzuführen. Bei einem list<int>, der bereits eine Größe von 3 hat, überschreibt ein Aufruf von assign(4, 1729) jetzt beispielsweise die int-Werte in den ersten drei Listenknoten und weist einen neuen Listenknoten mit dem Wert 1729 zu.

  • Alle erase(begin(), end())-Aufrufe der Standardbibliothek wurden in clear() geändert.

  • Mit std::vector werden Elemente in bestimmten Fällen jetzt effizienter initialisiert und gelöscht.

  • std::variant wurde verbessert und kann daher leichter optimiert werden. Dies führt zu besserem generierten Code. Codeinlining mit std::visit ist nun deutlich effizienter.

C++-IDE

C++-Unterstützung für Live Share

Live Share unterstützt nun C++ und ermöglicht es Entwicklern, die Visual Studio oder Visual Studio Code verwenden, in Echtzeit zusammenzuarbeiten. Weitere Informationen finden Sie unter Announcing Live Share for C++: Real-Time Sharing and Collaboration (Ankündigung: Live Share für C++ ermöglicht Austausch von Codeinformationen und Zusammenarbeit).

IntelliSense für Vorlagen

Für die Vorlagenleiste wird nun die Vorschaufenster-Benutzeroberfläche anstelle eines modalen Fensters verwendet. Außerdem unterstützt die Vorlagenleiste verschachtelte Vorlagen und füllt alle Standardargumente im Vorschaufenster vorab aus. Weitere Informationen finden Sie unter Template IntelliSense Improvements for Visual Studio 2019 Preview 2 (IntelliSense-Verbesserungen für Vorlagen in Vorschauversion 2 von Visual Studio 2019). Mit der Dropdownliste Zuletzt verwendet in der Vorlagenleiste können Sie schnell zwischen vorherigen Beispielargumenten wechseln.

Neues Startfenster

Beim Starten der IDE wird ein neues Startfenster angezeigt. Dieses Fenster enthält Optionen, mit denen Sie die zuletzt verwendeten Projekte öffnen oder Code aus der Quellcodeverwaltung klonen können. Außerdem haben Sie die Möglichkeit, lokalen Code als Projektmappe oder Ordner zu öffnen oder ein neues Projekt zu erstellen. Auch das Dialogfeld „Neues Projekt“ wurde angepasst. In diesem können Sie nun Suchvorgänge ausführen und Ergebnisse filtern.

Umbenennung mehrerer Projektvorlagen

Mehrere Projektvorlagennamen und -beschreibungen wurden so geändert, dass sie zum aktualisierten Dialogfeld „Neues Projekt“ passen.

Features zur Produktivitätssteigerung

Die folgenden Features in Visual Studio 2019 unterstützen Sie dabei, leichter und intuitiver zu programmieren:

  • Schnellkorrekturen für folgende Aufgaben:
    • Hinzufügen des fehlenden #include
    • NULL bis nullptr
    • Add missing semicolon
    • Auflösen fehlender Namespaces oder Bereiche
    • Ersetzen ungültiger Dereferenzierungsoperanden (* auf & und & auf *)
  • Anzeigen einer QuickInfo für einen Block, sobald mit dem Mauszeiger auf eine schließende geschweifte Klammer gezeigt wird
  • Anzeigen der Vorschau für eine Header-/Codedatei
  • „Zur Definition wechseln“ für #include öffnet die Datei

Weitere Informationen finden Sie unter C++ Productivity Improvements in Visual Studio 2019 Preview 2 (C++-Produktivitätsfeatures in Vorschauversion 2 von Visual Studio 2019).

CMake-Unterstützung

  • Unterstützung für CMake 3.14

  • Visual Studio kann nun vorhandene CMake-Caches öffnen, die von externen Tools wie CMakeGUI, benutzerdefinierten Metabuildsystemen oder Buildskripts generiert werden, die „cmake.exe“ selbst aufrufen.

  • Verbesserte IntelliSense-Leistung.

  • Der neue Editor für Einstellungen stellt eine Alternative zum manuellen Bearbeiten der Datei „CMakeSettings.json“ dar. Die Funktionen ähneln denen von CMakeGUI.

  • Visual Studio unterstützt Sie, Ihre C++-Entwicklung mit CMake unter Linux zu beginnen, indem es erkennt, ob Sie eine kompatible Version von CMake auf Ihrem Linux-Rechner haben. Ist dies nicht der Fall, bietet Visual Studio Ihnen an, CMake für Sie zu installieren.

  • Inkompatible Einstellungen in CMakeSettings, etwa nicht passende Architekturen oder inkompatible CMake-Generatoreinstellungen, bewirken, dass Wellenlinien im JSON-Editor und Fehler in der Fehlerliste angezeigt werden.

  • Die vcpkg-Toolkette wird für CMake-Projekte, die in der IDE geöffnet werden, sobald vcpkg integrate install ausgeführt wurde, automatisch erkannt und aktiviert. Dieses Verhalten kann deaktiviert werden, indem eine leere Toolkettendatei in CMakeSettings angegeben wird.

  • Für CMake-Projekte wird „Nur eigenen Code“-Debuggen jetzt standardmäßig aktiviert.

  • Warnungen bei statischer Analyse werden nun im Hintergrund verarbeitet und im Editor für CMake-Projekte angezeigt.

  • Es wurden eindeutigere build- und konfigurationsbezogene „begin“- und „end“-Nachrichten für CMake-Projekte hinzugefügt. Außerdem wird die Buildstatusanzeige von Visual Studio nun unterstützt. Zusätzlich gibt es nun unter Extras > Optionen eine CMake-Ausführlichkeitseinstellung, um den Detaillierungsgrad der CMake-Build- und -Konfigurationsmeldungen für das Ausgabefenster anzupassen.

  • Die Einstellung cmakeToolchain wird jetzt in der Datei „CMakeSettings.json“ unterstützt, damit Sie Toolketten angeben können, ohne die CMake-Befehlszeile manuell zu ändern.

  • Mit STRG+UMSCHALTTASTE+B ist nun eine neue Menüverknüpfung für Alle erstellen verfügbar.

IncrediBuild-Integration

IncrediBuild ist jetzt als optionale Komponente in der Workload Desktopentwicklung mit C++ enthalten. Der IncrediBuild Build Monitor ist vollständig in die Visual Studio-IDE integriert. Weitere Informationen finden Sie unter Visualisieren Ihres Builds mit IncrediBuild Build Monitor und Visual Studio 2019.

Debuggen

  • Für C++-Anwendungen unter Windows werden PDB-Dateien jetzt in einem separaten 64-Bit-Prozess geladen. Diese Änderung behebt eine Reihe von Abstürzen, die dadurch verursacht wurden, dass dem Debugger nicht genügend Arbeitsspeicher zur Verfügung stand. Beispielsweise beim Debuggen von Anwendungen, die eine große Anzahl von Modulen und PDB-Dateien enthielten.

  • Die Suche wird in den Fenstern Überwachen, Auto und Lokal aktiviert.

Windows Desktop-Entwicklung mit C++

  • Die folgenden C++-ATL/MFC-Assistenten sind nicht mehr verfügbar:

    • ATL COM+ 1.0 Komponenten-Assistent
    • ATL-Assistent für Active Server Pages-Komponenten
    • ATL-OLE DB-Anbieter-Assistent
    • ATL-Eigenschaftenseiten-Assistent
    • ATL-OLE DB-Consumer-Assistent
    • MFC-ODBC-Consumer
    • MFC-Klasse aus ActiveX-Steuerelement
    • MFC-Klasse aus Typbibliothek

    Beispielcode für diese Technologien ist in Microsoft Learn und im VCSamples-GitHub-Repository archiviert.

  • Das Windows 8.1 Software Development Kit (SDK) ist nicht mehr im Visual Studio-Installer verfügbar. Empfohlen wird ein Upgrade von C++-Projekten auf das neueste Windows SDK. Wenn eine erforderliche Abhängigkeit zu 8.1 besteht, können Sie das SDK aus dem Windows SDK-Archiv herunterladen.

  • Windows XP als Ziel ist für den neuesten C++-Toolset nicht mehr verfügbar. XP wird als Ziel mit MSVC-Compiler und -Bibliotheken in der Version für Visual Studio 2017 weiterhin unterstützt und kann über „Einzelne Komponenten“ installiert werden.

  • In der Dokumentation wird aktiv von einer Verwendung von Mergemodulen für die Bereitstellung von Visual C++ Runtime abgeraten. In diesem Release werden zusätzlich MSM-Dateien als veraltet gekennzeichnet. Sie sollten erwägen, Ihre zentrale VCRuntime-Bereitstellung von MSMs zum Redistributable Package zu migrieren.

Mobile Entwicklung mit C++ (Android und iOS)

Die C++-Android-Erfahrung verwendet jetzt standardmäßig das Android SDK 25 und Android NDK 16b.

Clang/C2-Plattformtoolset

Die experimentelle Komponente „Clang/C2“ wurde entfernt. Verwenden Sie das MSVC-Toolset für vollständige Konformität mit den C++-Standards, und nutzen Sie dabei /permissive- und /std:c++17 oder die Clang/LLVM-Toolkette für Windows.

Codeanalyse

Komponententest

Die Vorlage für verwaltete C++-Testprojekte (Managed C++ Test Project) ist nicht mehr verfügbar. Sie können aber weiterhin das Framework für verwaltete C++-Tests für Ihre vorhandenen Projekte einsetzen. Für neue Komponententests sollten Sie eines der nativen Testframeworks (MSTest, Google Test) verwenden, für das Visual Studio Vorlagen bereitstellt. Alternativ können Sie auch die Vorlage für verwaltete C#-Testprojekte nutzen.