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ügbarInclude-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.
-
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 InterceptorsRtlCreateHeap
undRtlAllocateHeap
wurde behoben, das beim Erstellen von ausführbaren Speicherpools entstand.Unterstützung für die Legacy-Speicherfunktionsfamilie
GlobalAlloc
undLocalAlloc
wurde hinzugefügt. Sie können diese Interceptors durch Festlegen des UmgebungsflagsASAN_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 Klausellastprivate
in#pragma omp
-Abschnitten und für nicht signierte Indexvariablen in parallelenfor
-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:
Verbesserte Stabilität und Funktionalität der Bereitstellung importierter Module und der Vervollständigung von Headereinheiten in IntelliSense.
Eine Gehe-zu-Definition für Modulimporte, Indizierungsunterstützung für
export {...}
und eine genauere Modulreferenz für Module mit demselben Namen wurden hinzugefügt.Die Sprachkonformität von C++ IntelliSense wurde durch Hinzufügen folgender Aspekte verbessert: Unterstützung für die Kopierinitialisierung temporärer Variablen in Verweisdirektinitialisierung,
__builtin_memcpy
und__builtin_memmove
, Beheben von Inkonsistenzen zwischenconstexpr
- undconsteval
-Funktionen, temporäre Variablen mit erweiterter Lebensdauer in konstanten Ausdrücken und ähnliche Typen und Verweisbindung.Für make_unique, make_shared, emplace und emplace_back wurde Vervollständigung hinzugefügt, die auf dem angegebenen Typparameter basiert.
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 wieconstexpr
std::vector
undstd::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
undstd::execution::unseq
, Optimierungen fürstd::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.
- C++17: Allgemeine Genauigkeit für
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 wiepush_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):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 vonchars_format::fixed
undchars_format::scientific
hinzugefügt (nurchars_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): - 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
- P0600R1:
- Verfügbar ohne Bedingung:
- Verfügbar unter
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
undends_with
fürbasic_string
undbasic_string_view
.contains
für assoziative Container.remove
,remove_if
undunique
fürlist
undforward_list
geben nunsize_type
zurück.shift_left
undshift_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-Anweisungfind_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
Wir unterstützen jetzt AddressSanitizer (ASan) in plattformübergreifenden Linux- und CMake-Projekten. Weitere Informationen finden Sie unter AddressSanitizer (ASan) for the Linux Workload in Visual Studio 2019 (AddressSanitizer (ASan) für die Linux-Workload in Visual Studio 2019).
Wir haben die Visual Studio-Unterstützung für die Verwendung von C++ mit dem Windows-Subsystem für Linux (WSL) integriert. Sie können Ihre lokale WSL-Installation (Windows-Subsystem für Linux) jetzt mit C++ nativ in Visual Studio ohne zusätzliche Konfiguration oder SSH-Verbindung verwenden. Weitere Informationen finden Sie unter C++ with Visual Studio 2019 and Windows Subsystem for Linux (WSL) (C++ mit Visual Studio 2019 und Windows-Subsystem für Linux (WSL)).
Codeanalyse
- Neue Schnellkorrekturen für nicht initialisierte Variablenüberprüfungen wurden hinzugefügt. Die Code Analysis-Warnungen C6001: using uninitialized memory
<variable>
(Nicht initialisierter Speicher „“ wird verwendet) und C26494 VAR_USE_BEFORE_INIT sind für relevante Zeilen im Glühbirnenmenü verfügbar. Sie sind standardmäßig im Regelsatz der nativen Microsoft-Mindestregeln bzw. den C++ Core Check-Typenregelsätzen aktiviert. Weitere Informationen finden Sie unter New code analysis quick fixes for uninitialized memory (C6001) and use before init (C26494) warnings (Neue Codeanalyse-Schnellkorrekturen für nicht initialisierten Speicher (C6001) und Verwendung vor der Initialisierung (C26494) von Warnungen).
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
undstd::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 vonstd::copy
oder bei der Erstellung vonstd::vector
- undstd::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, derstd::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 vonstd::thread
sechs Funktionen zwischen_beginthreadex
und dem angegebenen aufrufbaren Objekt eingefügt. Diese Zahl wurde auf drei reduziert (zwei davon sind lediglichstd::invoke
). Darüber hinaus wird mit dieser Änderung ein rätselhafter Zeitsteuerungsfehler behoben, bei dem ein Konstruktor vonstd::thread
hängt, wenn die Systemuhr genau während der Erstellung einesstd::thread
-Elements geändert wird.Es wurde ein Leistungsverlust in
std::hash
behoben, der sich aus der Implementierung vonstd::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 einernoexcept
-Funktion wurde behoben, indem der Auslösepfad ausgeklammert wurde.Für die
std::list
- undstd::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 einemlist<int>
, der bereits eine Größe von 3 hat, überschreibt ein Aufruf vonassign(4, 1729)
jetzt beispielsweise dieint
-Werte in den ersten drei Listenknoten und weist einen neuen Listenknoten mit dem Wert 1729 zu.Alle
erase(begin(), end())
-Aufrufe der Standardbibliothek wurden inclear()
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 mitstd::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
bisnullptr
- Add missing semicolon
- Auflösen fehlender Namespaces oder Bereiche
- Ersetzen ungültiger Dereferenzierungsoperanden (
*
auf&
und&
auf*
)
- Hinzufügen des fehlenden
- 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
Die Codeanalyse wird jetzt automatisch im Hintergrund ausgeführt. Warnungen werden während der Eingabe als grüne Wellenlinien im Editor angezeigt. Weitere Informationen finden Sie unter In-editor code analysis in Visual Studio 2019 Preview 2 (Codeanalyse im Editor in Vorschauversion 2 von Visual Studio 2019).
Neue, experimentelle ConcurrencyCheck-Regeln für bekannte Standardbibliothekstypen des
<mutex>
-Headers sind nun verfügbar. Weitere Informationen finden Sie unter Concurrency Code Analysis in Visual Studio 2019 (Codeanalyse für parallele Programmierung in Visual Studio 2019).Eine aktualisierte Teilimplementierung der Lebensdauerprofil-Prüfung ist nun verfügbar, um verbleibende Zeiger und Referenzen zu erkennen. Weitere Informationen finden Sie unter Lifetime Profile Update in Visual Studio 2019 Preview 2 (Lebensdauerprofil-Aktualisierung in Vorschauversion 2 von Visual Studio 2019).
Weitere Überprüfungen für Coroutinen wie C26138, C26810, C26811 und die experimentelle Regel C26800 sind nun verfügbar. Weitere Informationen finden Sie unter New Code Analysis Checks in Visual Studio 2019: use-after-move and coroutine (Neue Codeanalysen in Visual Studio 2019: Überprüfungen für Coroutinen und für die Verwendung von Objekten nach Nutzung der Move-Semantik).
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.