Neuerungen bei C++ in Visual StudioWhat's new for C++ in Visual Studio
Visual Studio 2019 enthält viele Updates und Fixes für die C++-Umgebung von Microsoft.Visual Studio 2019 brings many updates and fixes to the Microsoft C++ environment. Es wurden zahlreiche Fehler und Probleme mit dem Compiler sowie mit Tools behoben.We've fixed many bugs and issues in the compiler and tools. Viele Probleme wurden von Kunden über die Optionen Problem melden und Vorschlag senden unter Feedback senden übermittelt.Many of these issues were submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. Vielen Dank für das Melden von Fehlern!Thank you for reporting bugs! Weitere Informationen zu Neuerungen in Visual Studio finden Sie unter Neuerungen in Visual Studio 2019.For more information on what's new in all of Visual Studio, visit What's new 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.For information on what's new for C++ in Visual Studio 2017, see What's new for 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.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.
Weitere Informationen zu den Neuerungen in der C++-Dokumentation finden Sie unter Microsoft C++-Dokumentation: Neuigkeiten.For information about what's new in the C++ docs, see Microsoft C++ docs: What's new.
C++-CompilerC++ 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.Enhanced support for C++17 features and correctness fixes, plus experimental support for C++20 features such as modules and coroutines. Ausführliche Informationen finden Sie unter C++ Conformance Improvements in Visual Studio 2019 (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2019).For detailed information, see C++ Conformance Improvements 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.The/std:c++latest
option now includes C++20 features that aren't necessarily complete, including initial support for the C++20 operator <=> ("spaceship") for three-way comparison.Die C++-Compileroption
/Gm
ist nun veraltet.The C++ compiler switch/Gm
is now deprecated. Es empfiehlt sich, die/Gm
-Option in Buildskripts zu deaktivieren, wenn sie explizit festgelegt wurde.Consider disabling the/Gm
switch in your build scripts if it's explicitly defined. 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.However, you can also safely ignore the deprecation warning for/Gm
, because it's not treated as an error when using "Treat warnings as errors" (/WX
).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.As MSVC begins implementing features from the C++20 standard draft under the/std:c++latest
flag,/std:c++latest
is now incompatible with/clr
(all flavors),/ZW
, and/Gm
. 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).In Visual Studio 2019, use/std:c++17
or/std:c++14
modes when compiling with/clr
,/ZW
, or/Gm
(but see previous bullet).Vorkompilierte Header werden nicht mehr standardmäßig für C++-Konsolen- und -Desktop-Apps generiert.Precompiled headers are no longer generated by default for C++ console and desktop apps.
Codegenerierung, Sicherheit, Diagnosen und VersionsverwaltungCodegen, security, diagnostics, and versioning
Verbesserte Analysen mit /Qspectre
unterstützen die Entschärfung der Spectre-Variante 1 (CVE-2017-5753).Improved analysis with /Qspectre
for providing mitigation assistance for Spectre Variant 1 (CVE-2017-5753). Weitere Informationen finden Sie unter Spectre Mitigations in MSVC (Spectre-Entschärfungen in MSVC).For more information, see Spectre Mitigations in MSVC.
Verbesserungen der C++-StandardbibliothekC++ standard library improvements
Implementierung von zusätzlichen C++17- und C++20-Bibliotheksfeatures und Korrekturen der Genauigkeit.Implementation of additional C++17 and C++20 library features and correctness fixes. Ausführliche Informationen finden Sie unter C++ Conformance Improvements in Visual Studio 2019 (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2019).For detailed information, see C++ Conformance Improvements in Visual Studio 2019.
Das Clang-Format wurde zur besseren Lesbarkeit auf die Header der C++-Standardbibliothek angewendet.Clang-Format has been applied to the C++ standard library headers for improved readability.
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.Because Visual Studio now supports Just My Code for C++, the standard library no longer needs to provide custom machinery forstd::function
andstd::visit
to achieve the same effect. Die Entfernung dieser Komponenten hat im Allgemeinen keine für Benutzer sichtbare Auswirkung.Removing that machinery largely has no user-visible effects. 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.One exception is that the compiler will no longer produce diagnostics that indicate issues on line 15732480 or 16707566 of <type_traits> or <variant>.
Verbesserungen in Bezug auf Leistung/Durchsatz im Compiler und in der StandardbibliothekPerformance/throughput improvements in the compiler and standard library
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.Build throughput improvements, including the way the linker handles File I/O, and link time in PDB type merging and creation.
Die OpenMP-SIMD-Vektorisierung wird nun grundlegend unterstützt.Added basic support for OpenMP SIMD vectorization. Sie können sie mit der neuen Compileroption
/openmp:experimental
aktivieren.You can enable it using the new compiler switch/openmp:experimental
. Wenn diese Option festgelegt ist, werden Schleifen mit der Anmerkung#pragma omp simd
möglicherweise vektorisiert.This option allows loops annotated with#pragma omp simd
to potentially be vectorized. Die Vektorisierung wird allerdings nicht garantiert. Für Schleifen, die mit einer Anmerkung versehen sind, aber nicht vektorisiert werden, wird eine Warnung ausgegeben.The vectorization isn't guaranteed, and loops annotated but not vectorized will get a warning reported. SIMD-Klauseln werden nicht unterstützt. Sie werden ignoriert, und es wird eine Warnung angezeigt.No SIMD clauses are supported; they're ignored, and a warning is reported.Die neue Inlining-Befehlszeilenoption
/Ob3
wurde hinzugefügt. Diese führt im Vergleich zur/Ob2
-Version mehr Inliningvorgänge aus.Added a new inlining command-line switch/Ob3
, which is a more aggressive version of/Ob2
./O2
(Binärdateioptimierung für höhere Geschwindigkeit) impliziert weiterhin standardmäßig/Ob2
./O2
(optimize the binary for speed) still implies/Ob2
by default. Wenn Sie feststellen, dass der Compiler nicht genug Inliningvorgänge ausführt, sollten Sie/O2 -Ob3
verwenden.If you find that the compiler doesn't inline aggressively enough, consider passing/O2 -Ob3
.Intrinsische Funktionen der Short Vector Math Library (SVML) werden nun unterstützt.We've added support for Short Vector Math Library (SVML) intrinsic functions. Diese Funktionen berechnen die Entsprechungen von 128-, 256- oder 512-Bit-Vektoren.These functions compute the 128-bit, 256-bit, or 512-bit vector equivalents. Dadurch werden die manuelle Vektorisierung von Schleifen mit Aufrufen für mathematische Bibliotheksfunktionen und bestimmte andere Operationen wie Ganzzahldivisionen ermöglicht.We added them to support hand vectorization of loops with calls to math library functions, and certain other operations like integer division. Definitionen der unterstützten Funktionen finden Sie im Intel Intrinsics Guide.See the Intel Intrinsic Guide for definitions of the supported functions.
Neue und verbesserte Optimierungen:New and improved optimizations:
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 IntegerformenConstant-folding and arithmetic simplifications for expressions using SIMD vector intrinsics, for both float and integer forms.
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 sindA more powerful analysis for extracting information from control flow (if/else/switch statements) to remove branches always proven to be true or false.
Verbesserte memset-Auflösung zur Verwendung von SSE2-VektoranweisungenImproved memset unrolling to use SSE2 vector instructions.
Verbessertes Entfernen von nutzlosen struct/class-Kopien, insbesondere für C++-Programme, in denen Übergaben nach Wert erfolgenImproved removal of useless struct/class copies, especially for C++ programs that pass by value.
Verbesserte Optimierung von Code mithilfe von
memmove
, z. B. im Fall vonstd::copy
oder bei der Erstellung vonstd::vector
- undstd::string
-ObjektenImproved optimization of code usingmemmove
, such asstd::copy
orstd::vector
andstd::string
construction.
Optimierung des physischen Designs der Standardbibliothek, um zu vermeiden, dass Teile der Standardbibliothek, die nicht direkt enthalten sind, kompiliert werden.Optimized the standard library physical design to avoid compiling parts of the standard library not directly included. Diese Änderung verkürzte die Erstellungszeit einer leeren Datei, die nur <vector> enthält, um die Hälfte.This change cut the build time of an empty file that includes only <vector> in half. Daher müssen Sie ggf.
#include
-Anweisungen für Header hinzufügen, die zuvor indirekt eingebunden waren.As a consequence, you may need to add#include
directives for headers that were previously indirectly included. Beispielsweise muss bei Code, derstd::out_of_range
verwendet, jetzt ggf.#include <stdexcept>
hinzugefügt werden.For example, code that usesstd::out_of_range
may now need to add#include <stdexcept>
. Bei Code, für den ein Operator zum Einfügen eines Datenstroms verwendet wird, muss jetzt ggf.#include <ostream>
hinzugefügt werden.Code that uses a stream insertion operator may now need to add#include <ostream>
. 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.The benefit is that only translation units actually using <stdexcept> or <ostream> components pay the throughput cost to compile them.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.if constexpr
was applied in more places in the standard library for improved throughput and reduced code size in copy operations, in permutations like reverse and rotate, and in the parallel algorithms library.In der Standardbibliothek wird intern jetzt
if constexpr
verwendet, um die Kompilierzeiten zu reduzieren (auch im C ++14-Modus).The standard library now internally usesif constexpr
to reduce compile times, even in C++14 mode.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.The runtime dynamic linking detection for the parallel algorithms library no longer uses an entire page to store the function pointer array. Die Kennzeichnung dieses Speichers als schreibgeschützt wurde als nicht mehr relevant für die Sicherheit angesehen.Marking this memory read-only was considered no longer relevant for security purposes.
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.std::thread
's constructor no longer waits for the thread to start, and no longer inserts so many layers of function calls between the underlying C library_beginthreadex
and the supplied callable object. Bisher wurden vonstd::thread
sechs Funktionen zwischen_beginthreadex
und dem angegebenen aufrufbaren Objekt eingefügt.Previouslystd::thread
put six functions between_beginthreadex
and the supplied callable object. Diese Zahl wurde auf drei reduziert (zwei davon sind lediglichstd::invoke
).This number has been reduced to only three, two of which are juststd::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.This change also resolves an obscure timing bug, where astd::thread
constructor would stop responding if the system clock changed at the exact moment thestd::thread
was being created.Es wurde ein Leistungsverlust in
std::hash
behoben, der sich aus der Implementierung vonstd::hash<std::filesystem::path>
ergeben hat.Fixed a performance regression instd::hash
that we introduced when implementingstd::hash<std::filesystem::path>
.An mehreren Stellen der Standardbibliothek werden anstelle von catch-Blöcken jetzt Destruktoren verwendet, um Korrektheit zu erzielen.The standard library now uses destructors instead of catch blocks in several places to achieve correctness. 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).This change results in better debugger interaction: Exceptions you throw through the standard library in the affected locations now show up as being thrown from their original throw site, rather than our rethrow. Nicht alle catch-Blöcke der Standardbibliothek wurden beseitigt.Not all standard library catch blocks were eliminated. Wir gehen davon aus, dass die Anzahl von catch-Blöcken in späteren Releases von MSVC weiter reduziert wird.We expect the number of catch blocks to be reduced in later releases of MSVC.
Suboptimale Codegenerierung in
std::bitset
durch eine bedingte Auslösung in einer noexcept-Funktion wurde behoben, indem der Auslösepfad ausgeklammert wurde.Suboptimal codegen instd::bitset
caused by a conditional throw inside a noexcept function was fixed by factoring out the throwing path.Für die
std::list
- undstd::unordered_*
-Familie werden Iteratoren ohne Debugging intern an mehr Stellen verwendet.Thestd::list
andstd::unordered_*
family use non-debugging iterators internally in more places.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.Severalstd::list
members were changed to reuse list nodes where possible rather than deallocating and reallocating them. Bei einemlist<int>
, der bereits eine Größe von 3 hat, überschreibt ein Aufruf vonassign(4, 1729)
jetzt beispielsweise die Int-Elemente in den ersten drei Listenknoten und weist einen neuen Listenknoten mit dem Wert 1729 zu.For example, given alist<int>
that already has a size of 3, a call toassign(4, 1729)
now overwrites the ints in the first three list nodes, and allocates one new list node with the value 1729.Alle
erase(begin(), end())
-Aufrufe der Standardbibliothek wurden inclear()
geändert.All standard library calls toerase(begin(), end())
were changed toclear()
.Mit
std::vector
werden Elemente in bestimmten Fällen jetzt effizienter initialisiert und gelöscht.std::vector
now initializes and erases elements more efficiently in certain cases.std::variant
wurde verbessert und kann daher leichter optimiert werden. Dies führt zu besserem generierten Code.Improvements tostd::variant
to make it more optimizer-friendly, resulting in better generated code. Codeinlining mitstd::visit
ist nun deutlich effizienter.Code inlining is now much better withstd::visit
.
C++-IDEC++ IDE
C++-Unterstützung für Live ShareLive Share C++ support
Live Share unterstützt nun C++ und ermöglicht es Entwicklern, die Visual Studio oder Visual Studio Code verwenden, in Echtzeit zusammenzuarbeiten.Live Share now supports C++, allowing developers using Visual Studio or Visual Studio Code to collaborate in real time. 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).For more information, see Announcing Live Share for C++: Real-Time Sharing and Collaboration
IntelliCode für C++IntelliCode for C++
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
IntelliCode nutzt umfassendes eigenes Training und Ihren Codekontext, um Codeelemente, die Sie wahrscheinlich verwenden, am Anfang der Vervollständigungsliste anzuzeigen.IntelliCode uses its own extensive training and your code context to put what you're most likely to use at the top of your completion list. Dadurch müssen Sie oft nicht in der Liste nach unten scrollen.It can often eliminate the need to scroll down through the list. IntelliCode eignet sich für C++ insbesondere dann, wenn häufig eingesetzte Bibliotheken wie die Standardbibliothek verwendet werden.For C++, IntelliCode offers the most help when using popular libraries such as the standard library. IntelliCode ist eine optionale Erweiterung, die als Workloadkomponente im Installer verfügbar ist.IntelliCode is an optional extension available as a workload component in the installer. 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).For more information, see AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode.
IntelliSense für VorlagenTemplate IntelliSense
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.The Template Bar now uses the Peek Window UI rather than a modal window, supports nested templates, and pre-populates any default arguments into the Peek Window. 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).For more information, see Template IntelliSense Improvements for Visual Studio 2019 Preview 2. Mit der Dropdownliste Zuletzt verwendet in der Vorlagenleiste können Sie schnell zwischen vorherigen Beispielargumenten wechseln.A Most Recently Used dropdown in the Template Bar enables you to quickly switch between previous sets of sample arguments.
Neues StartfensterNew Start window experience
Beim Starten der IDE wird ein neues Startfenster angezeigt.When launching the IDE, a new Start window appears. 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.It has options to open recent projects, clone code from source control, open local code as a solution or a folder, or create a new project. Auch das Dialogfeld „Neues Projekt“ wurde angepasst. In diesem können Sie nun Suchvorgänge ausführen und Ergebnisse filtern.The New Project dialog has also been overhauled into a search-first, filterable experience.
Umbenennung mehrerer ProjektvorlagenNew names for some project templates
Mehrere Projektvorlagennamen und -beschreibungen wurden so geändert, dass sie zum aktualisierten Dialogfeld „Neues Projekt“ passen.We've modified several project template names and descriptions to fit with the updated New Project dialog.
Features zur ProduktivitätssteigerungVarious productivity improvements
Die folgenden Features in Visual Studio 2019 unterstützen Sie dabei, leichter und intuitiver zu programmieren:Visual Studio 2019 includes the following features that will help make coding easier and more intuitive:
- Schnellkorrekturen für folgende Aufgaben:Quick fixes for:
- Hinzufügen fehlender #include-AnweisungenAdd missing #include
- Umwandeln von NULL in nullptrNULL to nullptr
- Add missing semicolonAdd missing semicolon
- Auflösen fehlender Namespaces oder BereicheResolve missing namespace or scope
- Ersetzen ungültiger Dereferenzierungsoperanden (* in & und & in *)Replace bad indirection operands (* to & and & to *)
- Anzeigen einer QuickInfo für einen Block, sobald mit dem Mauszeiger auf eine schließende geschweifte Klammer gezeigt wirdQuick Info for a block by hovering on closing brace
- Anzeigen der Vorschau für eine Header-/CodedateiPeek Header / Code File
- Öffnen einer Datei durch Verwenden von „Zur Definition wechseln“ für #include-AnweisungenGo to Definition on #include opens the file
Weitere Informationen finden Sie unter C++ Productivity Improvements in Visual Studio 2019 Preview 2 (C++-Produktivitätsfeatures in Vorschauversion 2 von Visual Studio 2019).For more information, see C++ Productivity Improvements in Visual Studio 2019 Preview 2.
QuickInfo-VerbesserungenQuickInfo improvements
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
Für die QuickInfo wird jetzt die semantische Farbgebung Ihres Editors berücksichtigt.The Quick Info tooltip now respects the semantic colorization of your editor. Außerdem verfügt sie über den neuen Link Online suchen, mit dem nach Onlinedokumenten gesucht wird, um mehr Informationen zum jeweiligen Codekonstrukt zu erhalten.It also has a new Search Online link that will search for online docs to learn more about the hovered code construct. Über den Link in der QuickInfo, der für rot unterschlängelten Code angezeigt wird, kann online nach dem Fehler gesucht werden.The link provided by Quick Info for red-squiggled code will search for the error online. Auf diese Weise müssen Sie die Nachricht nicht erneut in Ihren Browser eingeben.That way you don't need to retype the message into your browser. 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).For more information, see Quick Info Improvements in Visual Studio 2019: Colorization and Search Online.
In C++-Workload verfügbarer IntelliCodeIntelliCode available in C++ workload
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
IntelliCode ist jetzt als optionale Komponente in der Workload Desktopentwicklung mit C++ enthalten.IntelliCode now ships as an optional component in the Desktop Development with C++ workload. Weitere Informationen finden Sie unter Improved C++ IntelliCode now Ships with Visual Studio 2019 (Verbesserter C++ IntelliCode ist jetzt in Visual Studio 2019 enthalten).For more information, see Improved C++ IntelliCode now Ships with Visual Studio 2019.
CMake-UnterstützungCMake support
Unterstützung für CMake 3.14Support for 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.Visual Studio can now open existing CMake caches generated by external tools, such as CMakeGUI, customized meta-build systems or build scripts that invoke cmake.exe themselves.
Verbesserte IntelliSense-Leistung.Improved IntelliSense performance.
Der neue Editor für Einstellungen stellt eine Alternative zum manuellen Bearbeiten der Datei „CMakeSettings.json“ dar. Die Funktionen ähneln denen von CMakeGUI.A new settings editor provides an alternative to manually editing the CMakeSettings.json file, and provides some parity with 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.Visual Studio helps bootstrap your C++ development with CMake on Linux by detecting if you have a compatible version of CMake on your Linux machine. Ist dies nicht der Fall, bietet Visual Studio Ihnen an, CMake für Sie zu installieren.If not, it offers to install it for you.
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.Incompatible settings in CMakeSettings, such as mismatched architectures or incompatible CMake generator settings, show squiggles in the JSON editor and errors in the error list.
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.The vcpkg toolchain is automatically detected and enabled for CMake projects that are opened in the IDE oncevcpkg integrate install
has been run. Dieses Verhalten kann deaktiviert werden, indem eine leere Toolkettendatei in CMakeSettings angegeben wird.This behavior can be turned off by specifying an empty toolchain file in CMakeSettings.Für CMake-Projekte wird „Nur eigenen Code“-Debuggen jetzt standardmäßig aktiviert.CMake projects now enable Just My Code debugging by default.
Warnungen bei statischer Analyse werden nun im Hintergrund verarbeitet und im Editor für CMake-Projekte angezeigt.Static analysis warnings are now processed in the background and displayed in the editor for CMake projects.
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.Clearer build and configure 'begin' and 'end' messages for CMake projects and support for Visual Studio's build progress UI. 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.Additionally, there's now a CMake verbosity setting in Tools > Options to customize the detail level of CMake build and configuration messages in the Output Window.
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.ThecmakeToolchain
setting is now supported in CMakeSettings.json to specify toolchains without manually modifying the CMake command line.Mit STRG+UMSCHALTTASTE+B ist nun eine neue Menüverknüpfung für Alle erstellen verfügbar.A new Build All menu shortcut Ctrl+Shift+B.
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
- Integrierte Unterstützung für die Bearbeitung, die Erstellung und das Debugging von CMake-Projekten mit Clang/LLVM.Integrated support for editing, building, and debugging CMake projects with Clang/LLVM. Weitere Informationen finden Sie unter Clang/LLVM Support in Visual Studio (Clang/LLVM-Unterstützung in Visual Studio).For more information, see Clang/LLVM Support in Visual Studio.
Linux und das Windows-Subsystem für LinuxLinux and the Windows Subsystem for Linux
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
Unterstützung für AddressSanitizer (ASan) in plattformübergreifenden Linux- und CMake-Projekten.Support for AddressSanitizer (ASan) in Linux and CMake cross-platform projects. 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).For more information, see AddressSanitizer (ASan) for the Linux Workload in Visual Studio 2019.
Integrierte Visual Studio-Unterstützung für die Verwendung von C++ mit dem Windows-Subsystem für Linux (WSL).Integrated Visual Studio support for using C++ with the Windows Subsystem for Linux (WSL). 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)).For more information, see C++ with Visual Studio 2019 and Windows Subsystem for Linux (WSL).
IncrediBuild-IntegrationIncrediBuild integration
IncrediBuild ist jetzt als optionale Komponente in der Workload Desktopentwicklung mit C++ enthalten.IncrediBuild is included as an optional component in the Desktop development with C++ workload. Der IncrediBuild Build Monitor ist vollständig in die Visual Studio-IDE integriert.The IncrediBuild Build Monitor is fully integrated in the Visual Studio IDE. Weitere Informationen finden Sie unter Visualisieren Ihres Builds mit IncrediBuild Build Monitor und Visual Studio 2019.For more information, see Visualize your build with IncrediBuild's Build Monitor and Visual Studio 2019.
DebuggenDebugging
Für C++-Anwendungen unter Windows werden PDB-Dateien jetzt in einem separaten 64-Bit-Prozess geladen.For C++ applications running on Windows, PDB files now load in a separate 64-bit process. Diese Änderung behebt eine Reihe von Abstürzen, die dadurch verursacht wurden, dass dem Debugger nicht genügend Arbeitsspeicher zur Verfügung stand.This change addresses a range of crashes caused by the debugger running out of memory. Beispielsweise beim Debuggen von Anwendungen, die eine große Anzahl von Modulen und PDB-Dateien enthielten.For example, when debugging applications that contain a large number of modules and PDB files.
Die Suche wird in den Fenstern Überwachen, Auto und Lokal aktiviert.Search is enabled in the Watch, Autos, and Locals windows.
Windows Desktop-Entwicklung mit C++Windows desktop development with C++
Die folgenden C++-ATL/MFC-Assistenten sind nicht mehr verfügbar:These C++ ATL/MFC wizards are no longer available:
- ATL COM+ 1.0 Komponenten-AssistentATL COM+ 1.0 Component Wizard
- ATL-Assistent für Active Server Pages-KomponentenATL Active Server Pages Component Wizard
- ATL-OLE DB-Anbieter-AssistentATL OLE DB Provider Wizard
- ATL-Eigenschaftenseiten-AssistentATL Property Page Wizard
- ATL-OLE DB-Consumer-AssistentATL OLE DB Consumer Wizard
- MFC-ODBC-ConsumerMFC ODBC Consumer
- MFC-Klasse aus ActiveX-SteuerelementMFC class from ActiveX control
- MFC-Klasse aus TypbibliothekMFC class from Type Lib.
Beispielcode für diese Technologien ist in der Microsoft-Dokumentation und im VCSamples-GitHub-Repository archiviert.Sample code for these technologies is archived at Microsoft Docs and the VCSamples GitHub repository.
Das Windows 8.1 Software Development Kit (SDK) ist nicht mehr im Visual Studio-Installer verfügbar.The Windows 8.1 Software Development Kit (SDK) is no longer available in the Visual Studio installer. Empfohlen wird ein Upgrade von C++-Projekten auf das neueste Windows 10 SDK.We recommend you upgrade your C++ projects to the latest Windows 10 SDK. Wenn eine erforderliche Abhängigkeit zu 8.1 besteht, können Sie das SDK aus dem Windows SDK-Archiv herunterladen.If you have a hard dependency on 8.1, you can download it from the Windows SDK archive.
Windows XP als Ziel ist für den neuesten C++-Toolset nicht mehr verfügbar.Windows XP targeting will no longer be available for the latest C++ toolset. 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.XP targeting with VS 2017-level MSVC compiler & libraries is still supported and can be installed via "Individual components."
In der Dokumentation wird aktiv von einer Verwendung von Mergemodulen für die Bereitstellung von Visual C++ Runtime abgeraten.Our documentation actively discourages usage of Merge Modules for Visual C++ Runtime deployment. In diesem Release werden zusätzlich MSM-Dateien als veraltet gekennzeichnet.We're taking the extra step this release of marking our MSMs as deprecated. Sie sollten erwägen, Ihre zentrale VCRuntime-Bereitstellung von MSMs zum Redistributable Package zu migrieren.Consider migrating your VCRuntime central deployment from MSMs to the redistributable package.
Mobile Entwicklung mit C++ (Android und iOS)Mobile development with C++ (Android and iOS)
Die C++-Android-Erfahrung verwendet jetzt standardmäßig das Android SDK 25 und Android NDK 16b.The C++ Android experience now defaults to Android SDK 25 and Android NDK 16b.
Clang/C2-PlattformtoolsetClang/C2 platform toolset
Die experimentelle Komponente „Clang/C2“ wurde entfernt.The Clang/C2 experimental component has been removed. 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.Use the MSVC toolset for full C++ standards conformance with /permissive-
and /std:c++17
, or the Clang/LLVM toolchain for Windows.
CodeanalyseCode analysis
Die Codeanalyse wird jetzt automatisch im Hintergrund ausgeführt.Code analysis now runs automatically in the background. Warnungen werden während der Eingabe als grüne Wellenlinien im Editor angezeigt.Warnings display as green squiggles in-editor as you type. 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).For more information, see In-editor code analysis in Visual Studio 2019 Preview 2.
Neue, experimentelle ConcurrencyCheck-Regeln für bekannte Standardbibliothekstypen des <mutex>-Headers sind nun verfügbar.New experimental ConcurrencyCheck rules for well-known standard library types from the <mutex> header. Weitere Informationen finden Sie unter Concurrency Code Analysis in Visual Studio 2019 (Codeanalyse für parallele Programmierung in Visual Studio 2019).For more information, see Concurrency Code Analysis in Visual Studio 2019.
Eine aktualisierte Teilimplementierung der Lebensdauerprofil-Prüfung ist nun verfügbar, um verbleibende Zeiger und Referenzen zu erkennen.An updated partial implementation of the Lifetime profile checker, which detects dangling pointers and references. Weitere Informationen finden Sie unter Lifetime Profile Update in Visual Studio 2019 Preview 2 (Lebensdauerprofil-Aktualisierung in Vorschauversion 2 von Visual Studio 2019).For more information, see Lifetime Profile Update in Visual Studio 2019 Preview 2.
Weitere Überprüfungen für Coroutinen wie C26138, C26810, C26811 und die experimentelle Regel C26800 sind nun verfügbar.More coroutine-related checks, including C26138, C26810, C26811, and the experimental rule C26800. 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).For more information, see New Code Analysis Checks in Visual Studio 2019: use-after-move and coroutine.
Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1
- Neue Schnellkorrekturen für nicht initialisierte Variablenüberprüfungen.New quick fixes for uninitialized variable checks. 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).For more information, see New code analysis quick fixes for uninitialized memory (C6001) and use before init (C26494) warnings.
KomponententestUnit testing
Die Vorlage für verwaltete C++-Testprojekte (Managed C++ Test Project) ist nicht mehr verfügbar.The Managed C++ Test Project template is no longer available. Sie können aber weiterhin das Framework für verwaltete C++-Tests für Ihre vorhandenen Projekte einsetzen.You can continue using the Managed C++ Test framework in your existing projects. 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.For new unit tests, consider using one of the native test frameworks for which Visual Studio provides templates (MSTest, Google Test), or the Managed C# Test Project template.
Visual Studio 2017 RC enthält viele Updates und Problembehebungen der C++-Umgebung.Visual Studio 2017 brings many updates and fixes to the C++ environment. Es wurden mehr als 250 Fehler und Probleme mit dem Compiler sowie mit Tools behoben.We've fixed over 250 bugs and reported issues in the compiler and tools. Viele dieser Probleme wurden von Kunden über die Optionen Problem melden und „Vorschlag senden“ unter Feedback senden übermittelt.Many were submitted by customers through the Report a Problem and Provide a Suggestion options under Send Feedback. Vielen Dank für das Melden von Fehlern!Thank you for reporting bugs! Weitere Informationen zu Neuerungen in Visual Studio finden Sie unter Neuerungen in Visual Studio 2017.For more information on what's new in all of Visual Studio, see What's new in Visual Studio 2017. Weitere Informationen zu Neuerungen für C++ in Visual Studio 2019 finden Sie unter Neuerungen für C++ in Visual Studio.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ in Visual Studio. 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.For information on what's new for C++ in Visual Studio 2015 and earlier versions, see Visual C++ What's New 2003 through 2015.
Visual Studio 2017 C++-CompilerVisual Studio 2017 C++ compiler
Verbesserungen an C++ bei der Übereinstimmung mit StandardsC++ conformance improvements
Der C++-Compiler und die Standardbibliothek wurden in diesem Release mit verbesserter Unterstützung für C++11- und C++14-Funktionen aktualisiert.We've updated the C++ compiler and standard library in this release with enhanced support for C++11 and C++14 features. Diese Verbesserungen schließen auch vorläufige Unterstützung für bestimmte Features ein, deren Implementierung im C++17-Standard erwartet wird.It also includes preliminary support for certain features expected to be in the C++17 standard. Ausführliche Informationen finden Sie unter Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual C++ 2017.For detailed information, see C++ Conformance Improvements in Visual Studio 2017.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Der Compiler unterstützt ungefähr 75 % der Features, die neu in C++17 sind (z. B. strukturierte Bindungen, constexpr
-Lambdaausdrücke, if constexpr
, Inlinevariablen, fold-Ausdrücke und das Hinzufügen von noexcept
zum Typsystem).The compiler supports about 75% of the features that are new in C++17, including structured bindings, constexpr
lambdas, if constexpr
, inline variables, fold expressions, and adding noexcept
to the type system. Diese Features sind unter der Option /std:c++17
verfügbar.These features are available under the /std:c++17
option. Weitere Informationen finden Sie unter Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2017.For more information, see C++ Conformance Improvements in Visual Studio 2017
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
Das MSVC-Compilertoolset in Visual Studio-Version 15.7 erfüllt nun den C++-Standard.The MSVC compiler toolset in Visual Studio version 15.7 now conforms with the C++ Standard. Weitere Informationen finden Sie unter Announcing: MSVC Conforms to the C++ Standard (Ankündigung: MSVC erfüllt den C++-Standard) und Microsoft C++-Sprachkonformität.For more information, see Announcing: MSVC Conforms to the C++ Standard and Microsoft C++ Language Conformance.
Visual Studio 2017 Version 15.8Visual Studio 2017 version 15.8
Mit der Compileroption /experimental:preprocessor
wird der neue experimentelle MSVC-Präprozessor aktiviert, der letztendlich mit allen gültigen C- und C++-Standards konform sein wird.The /experimental:preprocessor
compiler switch enables the new experimental MSVC preprocessor that will eventually conform to all applicable C and C++ standards. Weitere Informationen finden Sie unter Übersicht zum neuen MSVC-Präprozessor.For more information, see MSVC new preprocessor overview.
Neue CompileroptionenNew compiler options
/permissive-
: Aktiviert alle strikten Compileroptionen für die Übereinstimmung mit Standards und deaktiviert die meisten Microsoft-spezifischen Compilererweiterungen (aber z.B. nicht__declspec(dllimport)
)./permissive-
: Enable all strict standards conformance compiler options and disable most Microsoft-specific compiler extensions (but not__declspec(dllimport)
, for example). Diese Option ist in Visual Studio 2017-Version 15.5 standardmäßig aktiviert.This option is on by default in Visual Studio 2017 version 15.5. Der Konformitätsmodus/permissive-
schließt Unterstützung für die Zweiphasen-Namenssuche ein.The/permissive-
conformance mode includes support for two-phase name lookup. Weitere Informationen finden Sie unter C++ Conformance Improvements in Visual Studio (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio).For more information, see C++ Conformance Improvements in Visual Studio./diagnostics
: Aktiviert die Anzeige des Orts, an dem der Diagnosefehler oder die Warnung aufgetreten ist. Dabei sind drei Möglichkeiten verfügbar: nur die Zeilennummer, die Zeilennummer und die Spalte oder die Zeilennummer und die Spalte mit einem Caretzeichen unter der Codezeile, in der der Fehler oder die Warnung gefunden wurde./diagnostics
: Enables display of the diagnostic error or warning location three different ways: just the line number, the line number and column, or the line number and column, with a caret under the offending line of code./debug:fastlink
: Ermöglicht um bis zu 30 % schnellere inkrementelle Verknüpfungszeiten (im Vergleich mit Visual Studio 2015), indem nicht alle Debuginformationen in die PDB-Datei kopiert werden./debug:fastlink
: Enable up to 30% faster incremental link times (vs. Visual Studio 2015) by not copying all debug information into the PDB file. Die PDB-Datei zeigt stattdessen auf die Debuginformationen für das Objekt und die Bibliotheksdateien, die zum Erstellen der ausführbaren Datei verwendet wurden.The PDB file instead points to the debug information for the object and library files used to create the executable. Weitere Informationen finden Sie in den Blogbeiträgen Faster C++ build cycle in VS "15" with/Debug:fastlink
(Schnellerer C++-Buildzyklus in VS „15“ mit /Debug:fastlink) und Recommendations to speed C++ builds in Visual Studio (Empfehlungen zum Beschleunigen von C++-Builds in Visual Studio).See Faster C++ build cycle in VS "15" with/Debug:fastlink
and Recommendations to speed C++ builds in Visual Studio.Visual Studio 2017 ermöglicht die Verwendung von
/sdl
mit/await
.Visual Studio 2017 allows using/sdl
with/await
. Die/RTC
-Einschränkung mit Coroutinen wurde beseitigt.We removed the/RTC
limitation with Coroutines.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
/std:c++14
und/std:c++latest
: Diese Compileroptionen ermöglichen Ihnen das Verwenden bestimmter Versionen der Programmiersprache ISO C++ in einem Projekt./std:c++14
and/std:c++latest
: These compiler options enable you to opt in to specific versions of the ISO C++ programming language in a project. Die meisten Standardfeatures des neuen Entwurfs werden von der Option/std:c++latest
geschützt.Most of the new draft standard features are guarded by the/std:c++latest
option./std:c++17
aktiviert die C++17-Features, die vom Compiler implementiert werden./std:c++17
enables the set of C++17 features implemented by the compiler. Diese Option deaktiviert die Unterstützung von Compiler- und Standardbibliotheken für Features, die nach C++17 veröffentlicht wurden: Versionen des Arbeitsentwurfs und Fehlerbehebungsaktualisierungen des C++-Standards, die in späteren Versionen geändert wurden oder neu sind.This option disables compiler and standard library support for features after C++17: ones that are changed or new in later versions of the Working Draft, and defect updates of the C++ Standard. Verwenden Sie zum Aktivieren dieser Funktionen/std:c++latest
.To enable those features, use/std:c++latest
.
Codegenerierung, Sicherheit, Diagnosen und VersionsverwaltungCodegen, security, diagnostics, and versioning
Dieses Release bietet mehrere Verbesserungen hinsichtlich Optimierung, Codegenerierung, Versionsverwaltung für das Toolset sowie Diagnose.This release brings several improvements in optimization, code generation, toolset versioning, and diagnostics. Zu diesen Verbesserungen gehören folgende:Some notable improvements include:
- Verbesserte Generierung von Code für Schleifen: Unterstützung der automatischen Vektorisierung der Division von konstanten Integerwerten und verbesserte Erkennung von memset-Mustern.Improved code generation of loops: Support for automatic vectorization of division of constant integers, better identification of memset patterns.
- Verbesserte Codesicherheit: Verbesserte Ausgabe der Compilerdiagnose eines Pufferüberlaufs.
/guard:cf
schützt jetzt switch-Anweisungen, die Sprungtabellen generieren.Improved code security: Improved emission of buffer overrun compiler diagnostics, and/guard:cf
now guards switch statements that generate jump tables. - Versionsverwaltung: Der Wert des integrierten Präprozessormakros _MSC_VER wird nun bei jedem Update des Visual C++-Toolsets monoton aktualisiert.Versioning: The value of the built-in preprocessor macro _MSC_VER is now being monotonically updated at every Visual C++ toolset update. Weitere Informationen finden Sie unter Visual C++-Compilerversion.For more information, see Visual C++ Compiler Version.
- Neues Layout des Toolsets: Der Compiler und verwandte Buildtools haben auf dem Entwicklungscomputer einen neuen Speicherort und eine neue Verzeichnisstruktur.New toolset layout: The compiler and related build tools have a new location and directory structure on your development machine. Das neue Layout ermöglicht die parallele Installation mehrerer Versionen des Compilers.The new layout enables side-by-side installations of multiple versions of the compiler. Weitere Informationen finden Sie unter Layout der Compilertools in Visual Studio 2017.For more information, see Compiler Tools Layout in Visual Studio 2017.
- Verbesserte Diagnose: Das Ausgabefenster zeigt jetzt die Spalte an, in der ein Fehler auftritt.Improved diagnostics: The output window now shows the column where an error occurs. Weitere Informationen finden Sie im Blogbeitrag C++ compiler diagnostics improvements in VS „15“ Preview 5.For more information, see C++ compiler diagnostics improvements in VS "15" Preview 5.
- Bei Verwendung von Coroutinen wurde das experimentelle Schlüsselwort yield (verfügbar unter der Option
/await
) entfernt.When using coroutines, the experimental keyword yield (available under the/await
option) has been removed. Der Code sollte so aktualisiert werden, dass stattdessenco_yield
verwendet wird.Your code should be updated to useco_yield
instead. Weitere Informationen finden Sie im Schlüsselwortyield
, das in VS 2017co_yield
wird.For more information, seeyield
keyword to becomeco_yield
in VS 2017.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
Weitere Verbesserungen der Diagnose im Compiler.Additional improvements to diagnostics in the compiler. Weitere Informationen finden Sie unter Diagnostic Improvements in Visual Studio 2017 15.3.0 (Verbesserungen bei der Diagnose in Visual Studio 2017 15.3.0).For more information, see Diagnostic Improvements in Visual Studio 2017 15.3.0.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Die Visual C++-Laufzeitleistung wird weiterhin durch eine besser generierte Codequalität verbessert.Visual C++ runtime performance continues to improve through better generated code quality. Jetzt können Sie Ihren Code einfach neu kompilieren, und Ihre App wird schneller ausgeführt.Now you can just recompile your code, and your app runs faster. Einige der Compileroptimierungen sind brandneu, z.B. die Vektorisierung von bedingten skalaren Speichern, die Kombination der Aufrufe sin(x)
und cos(x)
in einem neuen Aufruf sincos(x)
und die Beseitigung von redundanten Anweisungen aus dem SSA-Optimierer.Some of the compiler optimizations are brand new, such as the vectorization of conditional scalar stores, the combining of calls sin(x)
and cos(x)
into a new sincos(x)
, and the elimination of redundant instructions from the SSA optimizer. Weitere Compileroptimierungen sind Verbesserungen an bestehenden Funktionen wie Vektorisierungsheuristiken für bedingte Ausdrücke, bessere Schleifenoptimierungen und float min/max codegen.Other compiler optimizations are improvements to existing functionality, such as: vectorizer heuristics for conditional expressions, better loop optimizations, and float min/max codegen. Der Linker verfügt über eine neue und schnellere /OPT:ICF
-Implementierung, die die Linkzeit um bis zu 9 % beschleunigen kann, und es sind weitere Leistungsoptimierungen für „inkrementelles Verknüpfen“ vorhanden.The linker has a new and faster /OPT:ICF
implementation, which can result in up to 9% link-time speedups, and there are other perf fixes in incremental linking. Weitere Informationen finden Sie unter /OPT (Optimierungen) und /INCREMENTAL (inkrementelles Verknüpfen).For more information, see /OPT (Optimizations) and /INCREMENTAL (Link Incrementally).
Der Microsoft C++-Compiler bietet Unterstützung für AVX-512 von Intel.The Microsoft C++ compiler supports Intel's AVX-512. Er verfügt über Anweisungen zur Vektorlänge, die neue Funktionen in AVX-512 für 128 und 256 Bit breite Register bereitstellen.It has Vector Length instructions that bring new functions in AVX-512 to 128-bit and 256-bit wide registers.
Die Option /Zc:noexceptTypes- kann verwendet werden, um zur C++14-Version von noexcept
zurückzukehren, während allgemein der C++17-Modus verwendet wird.The /Zc:noexceptTypes- option can be used to revert to the C++14 version of noexcept
while using C++17 mode in general. Diese Option ermöglicht es Ihnen, Ihren Quellcode zu aktualisieren, um ihn an C++17 anzupassen, ohne dass Sie Ihren gesamten throw()
-Code zur gleichen Zeit neu schreiben müssen.This option enables you to update your source code to conform to C++17 without having to rewrite all your throw()
code at the same time. Weitere Informationen dazu finden Sie unter Entfernen der dynamischen Ausnahmespezifikation und noexcept.For more information, see Dynamic exception specification removal and noexcept.
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
- Neuer Compilerschalter /Qspectre , um Speculative-Execution-Seitenkanalangriffe zu verringern.New compiler switch /Qspectre to help mitigate against speculative execution side-channel attacks. Weitere Informationen finden Sie unter Spectre Mitigations in MSVC (Spectre-Entschärfungen in MSVC).For more information, see Spectre mitigations in MSVC.
- Neue Diagnosewarnung für Spectre-Entschärfung.New diagnostic warning for Spectre mitigation. Weitere Informationen finden Sie unter Spectre diagnostic in Visual Studio 2017 Version 15.7 Preview 4 (Spectre-Diagnose in Visual Studio 2017-Version 15.7, Vorschauversion 4).For more information, see Spectre diagnostic in Visual Studio 2017 Version 15.7 Preview 4.
- Neuer Wert für/Zc,
/Zc:__cplusplus
: ermöglicht korrekte Berichterstattung für die Unterstützung des C++-Standards.A new value for /Zc,/Zc:__cplusplus
, enables correct reporting of the C++ standard support. Wenn die Option beispielsweise festgelegt ist und der Compiler sich im Modus/std:c++17
befindet, wird der Wert auf201703L
erweitert.For example, when the switch is set and the compiler is in/std:c++17
mode the value expands to201703L
. Weitere Informationen finden Sie unter MSVC now correctly reports __cplusplus (MSVC meldet jetzt ordnungsgemäß __cplusplus).For more information, see MSVC now correctly reports __cplusplus.
C++-StandardbibliothekC++ standard library
Verbesserungen der RichtigkeitCorrectness Improvements
Visual Studio 2017 RTM (Version 15.0)Visual Studio 2017 RTM (version 15.0)
- Kleinere Verbesserungen bei der Diagnose von
basic_string``_ITERATOR_DEBUG_LEVEL != 0
.Minorbasic_string
_ITERATOR_DEBUG_LEVEL != 0
diagnostics improvements. Beim Auslösen einer IDL-Überprüfung in einem Zeichenfolgenmechanismus wird nun das Verhalten gemeldet, das die Überprüfung ausgelöst hat.When an IDL check gets tripped in string machinery, it will now report the specific behavior that caused the trip. Anstelle von „string iterator not dereferencable“ (Zeichenfolgeniterator nicht dereferenzierbar), erhalten Sie „cannot dereference string iterator because it is out of range (e.g. an end iterator)“ (Zeichenfolgeniterator ist nicht dereferenzierbar, da er sich außerhalb des Bereichs befindet (z.B. ein End-Iterator)).For example, instead of "string iterator not dereferencable" you'll get "cannot dereference string iterator because it is out of range (e.g. an end iterator)". - Der Bewegungszuweisungsoperator
std::promise
, der zuvor zum dauerhaften Blockieren von Code führen konnte, wurde korrigiert.Fixed thestd::promise
move assignment operator, which previously could cause code to block forever. - Compilerfehler bei der impliziten Konvertierung von
atomic<T*>
inT*
wurden behoben.Fixed compiler errors with theatomic<T*>
implicit conversion toT*
. pointer_traits<Ptr>
erkennt jetzt ordnungsgemäßPtr::rebind<U>
.pointer_traits<Ptr>
now correctly detectsPtr::rebind<U>
.- Ein fehlender
const
-Qualifizierer immove_iterator
-Subtraktionsoperator wurde ergänzt.Fixed a missingconst
qualifier in themove_iterator
subtraction operator. - Die lautlose, ungültige Codegenerierung für zustandsbehaftete benutzerdefinierte Allokatoren, die
propagate_on_container_copy_assignment
undpropagate_on_container_move_assignment
anfordern, wurde korrigiert.Fixed silent bad codegen for stateful user-defined allocators requestingpropagate_on_container_copy_assignment
andpropagate_on_container_move_assignment
. atomic<T>
toleriert nun den überladenenoperator&()
.atomic<T>
now tolerates overloadedoperator&()
.- Compilerdiagnosen für falsche
bind()
-Aufrufe wurden leicht verbessert.Slightly improved compiler diagnostics for incorrectbind()
calls.
Es sind weitere Verbesserungen an der Standardbibliothek in Visual Studio 2017 RTM verfügbar.There are more standard library improvements in Visual Studio 2017 RTM. Eine vollständige Liste finden Sie im C++-Teamblogeintrag Standard Library Fixes In VS 2017 RTM (Behobene Probleme in der Standardbibliothek in VS 2017 RTM).For a complete list, see the C++ Team Blog entry Standard Library Fixes In VS 2017 RTM.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Standardbibliothekscontainer binden nun ihre
max_size()
annumeric_limits<difference_type>::max()
, anstattmax()
ansize_type
.Standard library containers now clamp theirmax_size()
tonumeric_limits<difference_type>::max()
rather than themax()
ofsize_type
. Dadurch wird sichergestellt, dass das Ergebnis vondistance()
in Iteratoren von diesem Container im Rückgabetyp vondistance()
darstellbar ist.This change ensures that the result ofdistance()
on iterators from that container is representable in the return type ofdistance()
. - Fehlende Spezialisierung wurde behoben:
auto_ptr<void>
.Fixed missing specializationauto_ptr<void>
. - Bei den Algorithmen
for_each_n()
,generate_n()
undsearch_n()
war in der Vergangenheit keine Kompilierung möglich, wenn es sich beim Längenargument nicht um einen integralen Typ handelte.Thefor_each_n()
,generate_n()
, andsearch_n()
algorithms previously failed to compile if the length argument wasn't an integral type. Es wird nun versucht, nicht integrale Längen in einendifference_type
des Iterators umzuwandeln.They now attempt to convert non-integral lengths to the iterators'difference_type
. normal_distribution<float>
gibt in der Standardbibliothek beim Einschränken von double auf float keine Warnungen mehr aus.normal_distribution<float>
no longer emits warnings inside the standard library about narrowing from double to float.- Einige
basic_string
-Vorgänge wurden korrigiert, bei denen bei Überprüfung der maximalen Überlaufgrößenpos
anstattmax_size()
verwendet wurde.Fixed somebasic_string
operations that usednpos
instead ofmax_size()
when checking for maximum size overflow. condition_variable::wait_for(lock, relative_time, predicate)
wartete bisher bei einer fälschlicherweise erfolgten Aktivierung die gesamte relative Zeit.condition_variable::wait_for(lock, relative_time, predicate)
would wait for the entire relative time if there was a spurious wake. Es wird nun nur für ein einzelnes Intervall der relativen Zeit gewartet.Now it waits for only a single interval of the relative time.future::get()
macht jetzt dasfuture
-Objekt ungültig, so wie es der Standard erfordert.future::get()
now invalidates thefuture
, as the standard requires.iterator_traits<void *>
war zuvor ein harter Fehler, weil versucht wurde,void&
zu formen. Es wird jetzt zu einer leeren Struktur, um die Verwendung voniterator_traits
in "is iterator" SFINAE-Bedingungen zuzulassen.iterator_traits<void *>
used to be a hard error because it attempted to formvoid&
; it now cleanly becomes an empty struct to allow use ofiterator_traits
in "is iterator" SFINAE conditions.- Einige von Clang -Wsystem-headers-Objekten gemeldete Warnungen wurden korrigiert.Some warnings reported by Clang -Wsystem-headers were fixed.
- Die von „Clang -Wmicrosoft-exception-spec“ gemeldete Warnung „exception specification in declaration does not match previous declaration“ (die Ausnahmespezifikation in der Deklaration entspricht nicht der vorherigen Deklaration) wurde ebenfalls korrigiert.Also fixed "exception specification in declaration does not match previous declaration" reported by Clang -Wmicrosoft-exception-spec.
- Von Clang und C1XX gemeldete mem-initializer-list-Reihenfolgewarnungen wurden ebenfalls korrigiert.Also fixed mem-initializer-list ordering warnings reported by Clang and C1XX.
- Die unsortierten Container tauschten ihre Hashfunktionen oder Prädikate nicht, wenn die Container selbst getauscht wurden.The unordered containers didn't swap their hash functions or predicates when the containers themselves were swapped. Dies erfolgt jetzt.Now they do.
- Viele Tauschvorgänge für Container sind jetzt als
noexcept
markiert (da die Standardbibliothek nie eine Ausnahme auslösen soll, wenn sie die nicht definierte Verhaltensbedingung „non-propagate_on_container_swap
non-equal-allocator“ erkennt).Many container swap operations are now markednoexcept
(as our standard library never intends to throw an exception when detecting the non-propagate_on_container_swap
non-equal-allocator undefined behavior condition). - Viele
vector<bool>
-Vorgänge sind jetzt mitnoexcept
gekennzeichnet.Manyvector<bool>
operations are now markednoexcept
. - Die Standardbibliothek erzwingt jetzt den Abgleich von
value_type
(im C++17-Modus) mit einem Escapehatch für die Abwahl.The standard library will now enforce matching allocatorvalue_type
(in C++17 mode) with an opt-out escape hatch. - Einige Bedingungen wurden korrigiert, bei denen „self-range-insert“ in
basic_string
den Inhalt der Zeichenfolge durcheinandergebracht hat.Fixed some conditions where self-range-insert intobasic_string
would scramble the strings contents. (Hinweis: „self-range-insert“ in Vektoren ist im Standard immer noch nicht zulässig.)(Note: self-range-insert into vectors is still prohibited by the Standard.) basic_string::shrink_to_fit()
wird nicht länger vompropagate_on_container_swap
der Zuweisung beeinträchtigt.basic_string::shrink_to_fit()
is no longer affected by the allocator'spropagate_on_container_swap
.std::decay
verarbeitet jetzt abominable-Funktionstypen (also Funktionstypen mit cv- und/oder ref-Qualifizierer).std::decay
now handles abominable function types, that is, function types that are cv-qualified, ref-qualified, or both.- include-Direktiven wurden geändert und verwenden jetzt die richtige Groß- und Kleinschreibung und Schrägstriche, was die Portierbarkeit verbessert.Changed include directives to use proper case sensitivity and forward slashes, improving portability.
- Warnung C4061 „enumerator 'enumerator' in switch of enum 'enumeration' is not explicitly handled by a case label“ (Enumerator 'enumerator' in der switch-Anweisung der Enumeration 'enumeration' wird von keiner case-Bezeichnung explizit behandelt) wurde korrigiert.Fixed warning C4061 "enumerator 'enumerator' in switch of enum 'enumeration' is not explicitly handled by a case label". Diese Warnung ist standardmäßig deaktiviert und wurde als Ausnahme der allgemeinen Richtlinie der Standardbibliothek für Warnungen korrigiert.This warning is off-by-default and was fixed as an exception to the standard library's general policy for warnings. (Die Standardbibliothek ist „
/W4
clean“, versucht jedoch nicht, „/Wall
clean“ zu sein.(The standard library is/W4
clean, but doesn't attempt to be/Wall
clean. Viele standardmäßig deaktivierte Warnungen verbrauchen übermäßig viele Ressourcen und sind nicht für die regelmäßige Verwendung gedacht.)Many off-by-default warnings are unusually noisy, and aren't intended to be used on a regular basis.) - Verbesserte
std::list
-Debugüberprüfungen.Improvedstd::list
debug checks. Listeniteratoren überprüfen jetztoperator->()
, undlist::unique()
markiert Iteratoren jetzt als ungültig.List iterators now checkoperator->()
, andlist::unique()
now marks iterators as invalidated. - Die Metaprogrammierung von „uses-allocator“ wurde im
tuple
korrigiert.Fixed uses-allocator metaprogramming intuple
.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
std::partition
ruft nun in Übereinstimmung mit dem Standard das PrädikatN
Mal anstattN + 1
Mal auf.std::partition
now calls the predicateN
times instead ofN + 1
times, as the standard requires.- Versuche, Magic Statics in Version 15.3 zu vermeiden, wurden in Version 15.5 korrigiert.Attempts to avoid magic statics in version 15.3 have been repaired in version 15.5.
std::atomic<T>
erfordert nicht mehr, dassT
standardmäßig konstruierbar ist.std::atomic<T>
no longer requiresT
to be default constructible.- Heapalgorithmen, die die logarithmische Zeit nutzen, weisen ein anderes Verhalten auf, wenn das Iteratordebugging aktiviert ist.Heap algorithms that take logarithmic time behave differently when iterator debugging is enabled. Es erfolgt keine Assertion der linearen Zeit zur Bestimmung, dass es sich bei der Eingabe tatsächlich um einen Heap handelt.They no longer do a linear time assertion that the input is in fact a heap.
__declspec(allocator)
wird jetzt nur noch für C1XX geschützt, um Warnungen des Compiler-Front-Ends Clang zu verhindern, das diesen Modifizierer von declspec nicht versteht.__declspec(allocator)
is now guarded for C1XX only, to prevent warnings from Clang, which doesn't understand this declspec.basic_string::npos
ist nun als Kompilierzeitkonstante verfügbar.basic_string::npos
is now available as a compile time constant.std::allocator
verarbeitet nun im C++17-Modus ordnungsgemäß die Speicherbelegung von überausgerichteten Typen, also von Typen, deren Ausrichtung größer alsmax_align_t
ist (sofern keine Deaktivierung durch/Zc:alignedNew-
erfolgt).std::allocator
in C++17 mode now properly handles allocation of over-aligned types, that is, types whose alignment is greater thanmax_align_t
, unless disabled by/Zc:alignedNew-
. Vektoren von Objekten mit 16- oder 32-Byte-Ausrichtung werden z.B. nun ordnungsgemäß für SSE- und AVX-Anweisungen ausgerichtet.For example, vectors of objects with 16-byte or 32-byte alignment are now properly aligned for SSE and AVX instructions.
Verbesserungen bei der Übereinstimmung mit StandardsConformance improvements
- Wir haben <any>, <string_view>,
apply()
undmake_from_tuple()
hinzugefügt.We added <any>, <string_view>,apply()
,make_from_tuple()
. - <optional>, <variant>,
shared_ptr::weak_type
und <cstdalign> wurden hinzugefügt.Added <optional>, <variant>,shared_ptr::weak_type
, and <cstdalign>. constexpr
wurde in C++14 fürmin(initializer_list)
,max(initializer_list)
undminmax(initializer_list)
sowiemin_element()
,max_element()
undminmax_element()
aktiviert.Enabled C++14constexpr
inmin(initializer_list)
,max(initializer_list)
, andminmax(initializer_list)
, andmin_element()
,max_element()
, andminmax_element()
.
Weitere Informationen finden Sie unter Microsoft C++-Sprachkonformität: Tabelle.For more information, see Microsoft C++ language conformance table.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Es wurden verschiedene weitere C++17-Features implementiert.Several additional C++17 features have been implemented. Weitere Informationen finden Sie unter Microsoft C++-Sprachkonformität: Tabelle.For more information, see Microsoft C++ language conformance table.
- P0602R0 wurde implementiert: „variant and optional should propagate copy/move triviality“.Implemented P0602R0 "variant and optional should propagate copy/move triviality".
- Die Standardbibliothek toleriert jetzt offiziell das Deaktivieren dynamischer RTTI über die Option /GR-.The standard library now officially tolerates dynamic RTTI being disabled via the /GR- option.
dynamic_pointer_cast()
undrethrow_if_nested()
erfordern grundsätzlichdynamic_cast
. Daher kennzeichnet die Standardbibliothek sie jetzt unter/GR-
als=delete
.Bothdynamic_pointer_cast()
andrethrow_if_nested()
inherently requiredynamic_cast
, so the standard library now marks them as=delete
under/GR-
. - Auch wenn dynamische RTTI über
/GR-
deaktiviert wurde, ist „statische RTTI“ (in Form vontypeid(SomeType)
) weiterhin verfügbar und unterstützt verschiedene Komponenten der Standardbibliothek.Even when dynamic RTTI has been disabled via/GR-
, "static RTTI" in the form oftypeid(SomeType)
is still available, and powers several standard library components. Die Standardbibliothek unterstützt über/D_HAS_STATIC_RTTI=0
jetzt auch die Deaktivierung der statischen RTTI.The standard library now supports disabling this feature too, via/D_HAS_STATIC_RTTI=0
. Durch diese Flag werdenstd::any
, die Memberfunktionentarget()
undtarget_type()
vonstd::function
sowie die Friend-Memberfunktionenget_deleter()
vonstd::shared_ptr
undstd::weak_ptr
deaktiviert.This flag also disablesstd::any
, thetarget()
andtarget_type()
member functions ofstd::function
, and theget_deleter()
friend member function ofstd::shared_ptr
andstd::weak_ptr
. - Die Standardbibliothek verwendet jetzt die C++14-Version von
constexpr
ohne Bedingung anstelle von bedingt definierten Makros.The standard library now uses C++14constexpr
unconditionally, instead of conditionally defined macros. - Die Standardbibliothek verwendet jetzt intern Aliasvorlagen.The standard library now uses alias templates internally.
- Die Standardbibliothek verwendet jetzt intern
nullptr
anstelle vonnullptr_t{}
.The standard library now usesnullptr
internally, instead ofnullptr_t{}
. (Die interne Nutzung von NULL wurde gelöscht.(Internal usage of NULL has been eradicated. Die interne Nutzung von „0-as-null“ wird nach und nach bereinigt.)Internal usage of 0-as-null is being cleaned up gradually.) - Die Standardbibliothek verwendet jetzt intern
std::move()
anstelle der stilistisch fehlerhaften Verwendung vonstd::forward()
.The standard library now usesstd::move()
internally, instead of stylistically misusingstd::forward()
. static_assert(false, "message")
wurde in#error message
geändert.Changedstatic_assert(false, "message")
to#error message
. Dies verbessert die Compilerdiagnose, da#error
die Kompilierung sofort beendet.This change improves compiler diagnostics because#error
immediately stops compilation.- Die Standardbibliothek markiert Funktionen nicht mehr als
__declspec(dllimport)
.The standard library no longer marks functions as__declspec(dllimport)
. Für moderne Linkertechnologien ist dies nicht mehr erforderlich.Modern linker technology no longer requires it. - SFINAE wurde in Standardvorlagenargumente extrahiert, wodurch der Code im Vergleich zu Rückgabetypen und Funktionsargumenttypen übersichtlicher wurde.Extracted SFINAE to default template arguments, which reduced clutter compared to return types and function argument types.
- Debugüberprüfungen in <random> verwenden jetzt die üblichen Mechanismen der Standardbibliothek anstelle der internen Funktion
_Rng_abort()
, diefputs()
für stderr aufgerufen hat.Debug checks in <random> now use the standard library's usual machinery, instead of the internal function_Rng_abort()
, which calledfputs()
to stderr. Die Implementierung dieser Funktion wurde für Binärkompatibilität beibehalten.This function's implementation has been kept for binary compatibility. Sie wird in der nächsten binärinkompatiblen Version der Standardbibliothek entfernt.We'll remove it in the next binary-incompatible version of the standard library.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
- Mehrere Features der Standardbibliothek wurden in Übereinstimmung mit dem C++17-Standard hinzugefügt, als veraltet markiert oder entfernt.Several standard library features have been added, deprecated, or removed per the C++17 standard. Weitere Informationen finden Sie unter C++ Conformance Improvements in Visual Studio (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio).For more information, see C++ conformance improvements in Visual Studio.
- Experimentelle Unterstützung für die folgenden parallelen Algorithmen:Experimental support for the following parallel algorithms:
all_of
any_of
for_each
for_each_n
none_of
reduce
replace
replace_if
sort
- Die Signaturen für die folgenden parallelen Algorithmen werden hinzugefügt, aktuell jedoch nicht parallelisiert.The signatures for the following parallel algorithms are added but not parallelized at this time. Bei der Profilerstellung wurden durch die Parallelisierung von Algorithmen, mit denen Elemente lediglich verschoben oder permutiert werden, keine Vorteile ermittelt:Profiling showed no benefit in parallelizing algorithms that only move or permute elements:
copy
copy_n
fill
fill_n
move
reverse
reverse_copy
rotate
rotate_copy
swap_ranges
Visual Studio 2017 Version 15.6Visual Studio 2017 version 15.6
- <memory_resource>
- Bibliotheksgrundlagen V1Library Fundamentals V1
- Löschen der
polymorphic_allocator
-ZuweisungDeletingpolymorphic_allocator
assignment - Verbesserung der KlassenvorlagenargumentableitungImproving class template argument deduction
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
- Unterstützung für parallele Algorithmen ist nicht mehr experimentellSupport for parallel algorithms is no longer experimental
- Eine neue Implementierung von <filesystem>A new implementation of <filesystem>
- Elementare Zeichenfolgenkonvertierungen (partiell)Elementary string conversions (partial)
std::launder()
std::byte
hypot(x,y,z)
- Vermeiden unnötigen VerfallsAvoiding unnecessary decay
- Mathematische spezielle FunktionenMathematical special functions
constexpr char_traits
- Herleitungsregelwerk für die StandardbibliothekDeduction guides for the standard library
Weitere Informationen finden Sie unter Microsoft C++-Sprachkonformität: Tabelle.For more information, see Microsoft C++ language conformance table.
Korrekturen für Leistung und DurchsatzPerformance and throughput fixes
- Vorgenommene
basic_string::find(char)
-Überladungen rufentraits::find
nur einmalig auf.Madebasic_string::find(char)
overloads only calltraits::find
once. Dies wurde zuvor als eine allgemeine Zeichenfolgensuche nach einer Zeichenfolge der Länge 1 implementiert.Previously, it was implemented as a general string search for a string of length 1. basic_string::operator==
überprüft nun die Größe der Zeichenfolge, bevor der Inhalt der Zeichenfolge verglichen wird.basic_string::operator==
now checks the string's size before comparing the strings' contents.- Die Kontrollkopplung in
basic_string
, die für den Compileroptimierer schwer zu analysieren war, wurde entfernt.Removed control coupling inbasic_string
, which was difficult for the compiler optimizer to analyze. Bei kurzen Zeichenfolgen verursacht der Aufruf vonreserve
auch dann Kosten, wenn keine Arbeit erledigt wird.For all short strings, callingreserve
still has a nonzero cost to do nothing. std::vector
wurde aus Leistungsgründen und zur Sicherstellung der korrekten Funktionsweise überholt. Das Aliasing während des Einfügens bzw. während des Neuerstellens und Einfügens (Emplacement) wird nun korrekt entsprechend des Standards durchgeführt. Die starke Ausnahmegarantie wird nun bereitgestellt, wenn dies laut Standard übermove_if_noexcept()
oder über eine andere Logik erforderlich ist. Beim Einfügen bzw. Neuerstellen und Einfügen werden weniger Elementoperationen durchgeführt.std::vector
has been overhauled for correctness and performance: aliasing during insert and emplace operations is now correctly handled as required by the Standard, the strong exception guarantee is now provided when required by the Standard viamove_if_noexcept()
and other logic, and insert and emplace do fewer element operations.- Die C++-Standardbibliothek vermeidet nun die Dereferenzierung von Fancy Pointern des Typs NULL.The C++ standard library now avoids dereferencing null fancy pointers.
- Verbesserte
weak_ptr::lock()
-Leistung.Improvedweak_ptr::lock()
performance. - Header der C++-Standardbibliothek vermeiden nun das Einschließen von Deklarationen für unnötige intrinsische Compilerfunktionen, um den Compilerdurchsatz zu erhöhen.To increase compiler throughput, C++ standard library headers now avoid including declarations for unnecessary compiler intrinsics.
- Die Leistung des Bewegungskonstruktors von
std::string
undstd::wstring
wurde um mehr als das Dreifache verbessert.Improved the performance ofstd::string
andstd::wstring
move constructors by more than three times.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Für Interaktionen mit
noexcept
, die ein Inlining derstd::atomic
-Implementierung in Funktionen verhindert haben, die die strukturierte Ausnahmebehandlung verwenden, wurde eine Problemumgehung eingeführt.Worked around interactions withnoexcept
, which prevented inlining thestd::atomic
implementation into functions that use Structured Exception Handling (SEH). - Die interne
_Deallocate()
-Funktion der Standardbibliothek wurde in kleinere Codeabschnitte optimiert, sodass sie jetzt inline an mehr Stellen eingebettet werden kann.Changed the standard library's internal_Deallocate()
function to optimize into smaller code, allowing it to be inlined into more places. std::try_lock()
wurde geändert und verwendet jetzt Paketerweiterung anstelle von Rekursion.Changedstd::try_lock()
to use pack expansion instead of recursion.- Der Algorithmus von
std::lock()
zum Verhindern von Deadlocks wurde verbessert und verwendet jetztlock()
-Vorgänge, anstatt alletry_lock()
auf allen Sperren zu durchlaufen.Improved thestd::lock()
deadlock avoidance algorithm to uselock()
operations instead of spinning ontry_lock()
on all the locks. - Die Optimierung von benannten Rückgabewerten in
system_category::message()
wurde aktiviert.Enabled the Named Return Value Optimization insystem_category::message()
. conjunction
unddisjunction
instanziieren jetztN + 1
-Typen anstatt2N + 2
-Typen.conjunction
anddisjunction
now instantiateN + 1
types, instead of2N + 2
types.std::function
instanziiert den Mechanismus für die Zuweisungsunterstützung nicht mehr für jedes aufrufbare Objekt mit Typlöschung. Dies erhöht den Durchsatz und reduziert die OBJ-Größe in Programmen, die viele verschiedene Lambdas anstd::function
übergeben.std::function
no longer instantiates allocator support machinery for each type-erased callable, improving throughput and reducing .obj size in programs that pass many distinct lambdas tostd::function
.allocator_traits<std::allocator>
enthält manuellestd::allocator
-Inlinevorgänge und verringert die Codegröße in Code, der mitstd::allocator
nur überallocator_traits
interagiert (dies gilt für den Großteil von Codes).allocator_traits<std::allocator>
contains manually inlinedstd::allocator
operations, reducing code size in code that interacts withstd::allocator
throughallocator_traits
only (that is, in most code).- Die minimale Zuweisungsschnittstelle von C++11 wird jetzt von der Standardbibliothek verarbeitet, die
allocator_traits
direkt aufruft, anstatt die Zuweisung in einer internen Klasse_Wrap_alloc
zu umschließen.The C++11 minimal allocator interface is now handled by the standard library callingallocator_traits
directly, instead of wrapping the allocator in an internal class_Wrap_alloc
. Dies reduziert den Umfang des Codes, der für die Unterstützung der Zuweisung generiert wird, verbessert in einigen Fällen die Möglichkeit des Optimierers, sich mit den Standardbibliothekscontainern auseinanderzusetzen, und verbessert das Debuggen (Sie sehen im Debugger jetzt Ihren Zuweisungstyp anstelle von_Wrap_alloc<your_allocator_type>
).This change reduces the code size generated for allocator support, improves the optimizer's ability to reason about standard library containers in some cases, and provides a better debugging experience (as now you see your allocator type, rather than_Wrap_alloc<your_allocator_type>
in the debugger). - Die Metaprogrammierung für benutzerdefinierte
allocator::reference
-Elemente, die von Zuweisungen nicht angepasst werden dürfen, wurde entfernt.Removed metaprogramming for customizedallocator::reference
, which allocators aren't allowed to customize. (Durch Zuweisungen können Container originelle Zeiger verwenden, aber keine originellen Verweise.)(Allocators can make containers use fancy pointers but not fancy references.) - Das Compiler-Front-End entpackt jetzt Debugiteratoren in reihenfolgebasierten for-Schleifen und verbessert so die Leistung von Debugbuilds.The compiler front end was taught to unwrap debug iterators in range-based for loops, improving the performance of debug builds.
- Der interne Reduzierungspfad von
basic_string
fürshrink_to_fit()
undreserve()
befindet sich nicht mehr im Pfad für Neuzuweisungsvorgänge, wodurch der Codeumfang für alle mutierenden Member reduziert wird.Thebasic_string
internal shrink path forshrink_to_fit()
andreserve()
is no longer in the path of reallocating operations, reducing code size for all mutating members. - Der interne Erweiterungspfad von
basic_string
befindet sich nicht mehr im Pfad vonshrink_to_fit()
.Thebasic_string
internal grow path is no longer in the path ofshrink_to_fit()
. - Mutierende Vorgänge von
basic_string
werden jetzt in nicht zuweisende schnelle Pfadfunktionen und zuweisende langsame Pfadfunktionen einbezogen, sodass allgemeine, nicht erneut zuweisende Funktionen wahrscheinlicher inline in aufrufende Funktionen eingebettet werden.Thebasic_string
mutating operations are now factored into non-allocating fast path and allocating slow path functions, making it more likely for the common no-reallocate case to be inlined into callers. - Mutierende Vorgänge von
basic_string
konstruieren jetzt erneut zugewiesene Puffer im bevorzugten Zustand, anstatt lokal die Größe zu ändern.Thebasic_string
mutating operations now construct reallocated buffers in the preferred state rather than resizing in place. Durch eine Einfügung am Anfang einer Zeichenfolge wird der Inhalt nach der Einfügung jetzt z. B. exakt einmal verschoben.For example, an insert at the beginning of a string now moves the content after the insertion exactly once. Er wird entweder nach unten oder in den neu zugeordneten Puffer verschoben.It's moved either down or to the newly allocated buffer. Folglich wird er bei der Neuzuordnung nicht mehr zweimal verschoben (zunächst in den neu zugeordneten Puffer und dann nach unten).It's no longer moved twice in the reallocating case, first to the newly allocated buffer and then down. - Vorgänge, die die C-Standardbibliothek in <string> aufrufen, speichern jetzt die Adresse von
errno
, um wiederholte Interaktionen mit TLS zu entfernen.Operations calling the C standard library in <string> now cache theerrno
address to remove repeated interaction with TLS. - Die Implementierung von
is_pointer
wurde vereinfacht.Simplified theis_pointer
implementation. - Die Umstellung von SFINAE für Ausdrücke von einer Funktionsbasis auf eine
struct
- undvoid_t
-Basis wurde abgeschlossen.Finished changing function-based Expression SFINAE tostruct
andvoid_t
-based. - Algorithmen der Standardbibliothek vermeiden jetzt postinkrementelle Iteratoren.Standard library algorithms now avoid postincrementing iterators.
- Warnungen zu Abschneidungen beim Verwenden von 32-Bit-Zuweisungen in 64-Bit-Systemen wurden korrigiert.Fixed truncation warnings when using 32-bit allocators on 64-bit systems.
- Die Zuweisung von
std::vector
-Verschiebungen erfolgt jetzt für Vorgänge, die weder der Zuweisung noch POCMA entsprechen, effizienter, indem nach Möglichkeit der Puffer wiederverwendet wird.std::vector
move assignment is now more efficient in the non-POCMA non-equal-allocator case, by reusing the buffer when possible.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
basic_string<char16_t>
interagiert nun mit den gleichen Optimierungen vonmemcmp
undmemcpy
sowie ähnlichen Optimierungen, die vonbasic_string<wchar_t>
verwendet werden.basic_string<char16_t>
now engages the samememcmp
,memcpy
, and similar optimizations thatbasic_string<wchar_t>
engages.- Eine Einschränkung des Optimierers, die verhindert hat, dass Funktionszeiger durch unsere Arbeitsweise „Vermeiden von Kopierfunktionen“ in Visual Studio 2015 Update 3 inline dargestellt wurden, wurde umgangen, wodurch die Leistung von
lower_bound(iter, iter, function pointer)
wiederhergestellt wurde.An optimizer limitation that prevented function pointers from being inlined, exposed by our "avoid copying functions" work in Visual Studio 2015 Update 3, has been worked around, restoring performance oflower_bound(iter, iter, function pointer)
. - Der Mehraufwand für die Überprüfung der Reihenfolge von Eingaben (
includes
,set_difference
,set_symmetric_difference
undset_union
) des Iteratordebuggens wurde durch das Entpacken von Iteratoren vor der Überprüfung der Reihenfolge verringert.The overhead of iterator debugging's order verification of inputs toincludes
,set_difference
,set_symmetric_difference
, andset_union
was reduced by unwrapping iterators before checking order. std::inplace_merge
überspringt nun Elemente, die sich bereits in der richtigen Position befinden.std::inplace_merge
now skips over elements that are already in position.- Das Erstellen von
std::random_device
erstellt nicht länger einstd::string
-Element bzw. zerstört es auch nicht mehr.Constructingstd::random_device
no longer constructs and then destroys astd::string
. - Für
std::equal
undstd::partition
wurde ein Jump Threading-Optimierungsdurchlauf ausgeführt, durch den ein Iteratorvergleich weniger erforderlich ist.std::equal
andstd::partition
had a jump-threading optimization pass that saves an iterator comparison. - Wenn
std::reverse
Zeiger auf trivial kopierbaresT
übergeben werden, erfolgt die Ausgabe nun an eine handgeschriebene vektorisierte Implementierung.Whenstd::reverse
is passed pointers to trivially copyableT
, it will now dispatch to a handwritten vectorized implementation. std::fill
,std::equal
undstd::lexicographical_compare
wurden beigebracht, wie die Weiterleitung anmemset
undmemcmp
fürstd::byte
undgsl::byte
(sowie für andere char-ähnliche Enumerationen und Enumerationsklassen) funktioniert.std::fill
,std::equal
, andstd::lexicographical_compare
were taught how to dispatch tomemset
andmemcmp
forstd::byte
andgsl::byte
(and other char-like enums and enum classes). Die Weiterleitung fürstd::copy
erfolgt mithilfe vonis_trivially_copyable
. Daher sind keine Änderungen notwendig.Sincestd::copy
dispatches usingis_trivially_copyable
, it didn't need any changes.- Die Standardbibliothek enthält keine Destruktoren mehr mit leeren Klammern, deren einziges Verhalten darin bestand, Typen als nicht tribial zerstörbar zu definieren.The standard library no longer contains empty-braces destructors whose only behavior was to make types non-trivially-destructible.
Weitere BibliothekenOther Libraries
Unterstützung für Open-Source-BibliothekenOpen-source library support
Vcpkg ist ein Open-Source-Befehlszeilentool, das den Prozess des Beziehens und Erstellens von statischen C++-Open-Source Bibliotheken und DLLs in Visual Studio sehr stark vereinfacht.Vcpkg is an open-source command-line tool that greatly simplifies the process of acquiring and building open-source C++ static libs and DLLS in Visual Studio. Weitere Informationen finden Sie unter vcpkg: Ein C++-Paket-Manager für Windows, Linux und macOS.For more information, see vcpkg: A package manager for C++.
C++ REST SDK 2.9.0CPPRest SDK 2.9.0
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Das C++ REST SDK, eine plattformübergreifende Web-API für C++, wurde auf Version 2.9.0 aktualisiert.The CPPRestSDK, a cross-platform web API for C++, has been updated to version 2.9.0. Weitere Informationen finden Sie im Blogbeitrag CppRestSDK 2.9.0 is available on GitHub.For more information, see CppRestSDK 2.9.0 is available on GitHub.
ATLATL
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
- Weitere Korrekturen an der Übereinstimmung bei der Suche nach NamenYet another set of name-lookup conformance fixes
- Vorhandene Bewegungskonstruktoren und Bewegungszuweisungsoperatoren werden jetzt ordnungsgemäß als nicht auslösend markiert.Existing move constructors and move assignment operators are now properly marked as non-throwing
- Die gültige Warnung C4640 zur threadsicheren Initialisierung von lokalen statischen Variablen in „atlstr.h“ wird nicht mehr unterdrückt.Unsuppress valid warning C4640 about thread safe init of local statics in atlstr.h
- Die threadsichere Initialisierung lokaler statischer Variablen wurde bei Verwendung von ATL zum Erstellen einer DLL im XP-Toolset automatisch deaktiviert.Thread-safe initialization of local statics was automatically turned off in the XP toolset when using ATL to build a DLL. Dies ist nicht mehr der Fall.Now it's not. Wenn Sie keine threadsichere Initialisierung wünschen, können Sie
/Zc:threadSafeInit-
in Ihren Projekteinstellungen hinzufügen.You can add/Zc:threadSafeInit-
in your Project settings if you don't want thread-safe initialization.
Visual C++ RuntimeVisual C++ runtime
- Neuer Header „cfguard.h“ für Ablaufsteuerungsschutz-Symbole.New header "cfguard.h" for Control Flow Guard symbols.
Visual Studio 2017 C++-IDEVisual Studio 2017 C++ IDE
- Die Leistung bei Konfigurationsänderungen ist jetzt für native C++-Projekte besser und für C++-/CLI-Projekte viel besser.Configuration change performance is now better for C++ native projects and much better for C++/CLI projects. Wenn eine Projektmappenkonfiguration zum ersten Mal aktiviert wird, ist sie jetzt schneller, und alle späteren Aktivierungen dieser Projektmappenkonfiguration erfolgen fast unmittelbar.When a solution configuration is activated for the first time, it will now be faster, and all later activations of this solution configuration will be almost instantaneous.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Verschiedene Projekt- und Code-Assistenten wurden im Signaturdialogstil umgeschrieben.Several project and code wizards have been rewritten in the signature dialog style.
- Klasse hinzufügen startet den Assistenten zum Hinzufügen von Klassen nun direkt.Add Class now launches the Add Class wizard directly. Alle anderen Elemente, die hier zuvor verfügbar waren, finden Sie nun unter Hinzufügen > Neues Element.All of the other items that were previously here are now available under Add > New Item.
- Win32-Projekte sind nun im Dialogfeld Neues Projekt in der Windows Desktop-Kategorie zu finden.Win32 projects are now under the Windows Desktop category in the New Project dialog.
- Die Windows-Konsolen- und Desktopanwendungsvorlagen erstellen die Projekte nun, ohne einen Assistenten anzuzeigen.The Windows Console and Desktop Application templates now create the projects without displaying a wizard. Es gibt einen neuen Windows Desktop-Assistenten in der gleichen Kategorie, der die gleichen Optionen wie der alte Assistent für die Win32-Konsolenanwendung anzeigt.There's a new Windows Desktop Wizard under the same category that displays the same options as the old Win32 Console Application wizard.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Mehrere Vorgänge in C++, die die IntelliSense-Engine für Refactoring und Codenavigation verwenden, werden viel schneller ausgeführt.Several C++ operations that use the IntelliSense engine for refactoring and code navigation run much faster. Die folgenden Angaben basieren auf der Visual Studio Chromium-Lösung mit 3.500 Projekten:The following numbers are based on the Visual Studio Chromium solution with 3500 projects:
FeatureFeature | LeistungssteigerungPerformance Improvement |
---|---|
UmbenennenRename | 5,3-fach5.3x |
Signatur ändernChange Signature | 4,5-fach4.5x |
Alle Verweise suchenFind All References | 4,7-fach4.7x |
C++ unterstützt jetzt STRG+Klick-GoTo-Definition, was die Navigation mit der Maus zu Definitionen vereinfacht.C++ now supports Ctrl+Click Go To Definition, making mouse navigation to definitions easy. Die Strukturvisualisierung aus dem Productivity Power Tools-Paket ist nun standardmäßig auch im Produkt enthalten.The Structure Visualizer from the Productivity Power Tools pack is now also included in the product by default.
IntelliSenseIntelliSense
Die neue, auf SQLite basierende Datenbank-Engine wird jetzt standardmäßig verwendet.The new SQLite-based database engine is now being used by default. Mit der neuen Engine werden Datenbankvorgänge wie Zur Definition wechseln und Alle Verweise suchen beschleunigt.The new engine speeds up database operations like Go To Definition and Find All References. Die Dauer der anfänglichen Projektmappenanalyse wird erheblich reduziert.It significantly improves initial solution parse time. Diese Einstellung befindet sich jetzt unter Tools > Optionen > Text-Editor > C/C++ > Erweitert.The setting has moved to Tools > Options > Text Editor > C/C++ > Advanced. (Bisher befand sie sich unter „...C/C++ > Experimentell“.)(It was formerly under ...C/C++ > Experimental.)
Wir haben die IntelliSense-Leistung für Projekte und Dateien verbessert, die keine vorkompilierten Header verwenden. Ein automatisch vorkompilierter Header wird für Header in der aktuellen Datei erstellt.We've improved IntelliSense performance on projects and files not using precompiled headers - an Automatic Precompiled Header will be created for headers in the current file.
Wir haben die Fehlerfilterung und Hilfe für IntelliSense-Fehler in der Fehlerliste hinzugefügt.We've added error filtering and help for IntelliSense errors in the error list. Das Klicken auf die Fehlerspalte ermöglicht jetzt die Filterung.Clicking on the error column now allows for filtering. Durch Klicken auf die einzelnen Fehler oder durch Drücken von F1 wird eine Onlinesuche nach der Fehlermeldung gestartet.Also, clicking on the specific errors or pressing F1 will launch an online search for the error message.
Die Möglichkeit zum Filtern von Elementen der Memberliste nach Typ wurde hinzugefügt.Added the ability to filter Member List items by kind.
Eine neue experimentelle, vorhersehbare IntelliSense-Funktion, die das kontextbewusste Filtern in der Memberliste bereitstellt, wurde hinzugefügt.Added a new experimental Predictive IntelliSense feature that provides contextually aware filtering of what appears in the Member List. Weitere Informationen finden Sie im Blogbeitrag C++ IntelliSense Improvements – Predictive IntelliSense & Filtering (Verbesserungen in C++-IntelliSense: Predictive IntelliSense und Filtern).For more information, see C++ IntelliSense Improvements - Predictive IntelliSense & Filtering.
Alle Verweise suchen (UMSCHALT+F12) ermöglicht nun eine einfachere Navigation, auch in komplexen Codebasen.Find All References (Shift+F12) now helps you get around easily, even in complex codebases. Das Feature bietet eine erweiterte Gruppierung, Filterung, Sortierung, Suche in Ergebnissen und (für einige Sprachen) eine Einfärbung, damit Sie Ihre Verweise umfassend verstehen können.It provides advanced grouping, filtering, sorting, searching within results, and (for some languages) colorization, so you can get a clear understanding of your references. Für C++ enthält die neue Benutzeroberfläche Informationen dazu, ob Informationen aus einer Variablen gelesen oder in eine Variable geschrieben werden.For C++, the new UI includes information about whether we're reading from or writing to a variable.
Die Punkt-zu-Pfeil-Funktion von IntelliSense wurde aus „experimentell“ in „erweitert“ verschoben und ist nun standardmäßig aktiviert.The Dot-to-Arrow IntelliSense feature has been moved from experimental to advanced, and is now enabled by default. Die Editor-Funktionen Erweiterungsbereiche und Erweiterungsrangfolge wurden auch von „experimentell“ zu „erweitert“ verschoben.The editor features Expand Scopes and Expand Precedence have also been moved from experimental to advanced.
Die experimentellen Refactoringfeatures Signatur ändern und Funktion extrahieren sind nun standardmäßig verfügbar.The experimental refactoring features Change Signature and Extract Function are now available by default.
Das neue experimentelle Feature „Schnelleres Laden von Projekten“ für C++-Projekte wurde hinzugefügt.Added an experimental 'Faster project load' feature for C++ projects. Wenn Sie das nächste Mal ein C++-Projekt öffnen, wird es schneller geladen. Anschließende Ladevorgänge erfolgen sogar noch schneller!The next time you open a C++ project it will load faster, and the time after that it will load much faster!
Einige dieser Features sind auch in anderen Sprachen gängig, während einige C++-spezifisch sind.Some of these features are common to other languages, and some are specific to C++. Weitere Informationen zu diesen neuen Features finden Sie im Blogbeitrag Announcing Visual Studio "15" Preview 5 (Ankündigung von Visual Studio 2017 Vorschauversion 5).For more information about these new features, see Announcing Visual Studio "15" Preview 5.
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
- Unterstützung für ClangFormat wurde hinzugefügt.Support added for ClangFormat. Weitere Informationen finden Sie im Blogbeitrag ClangFormat Support in Visual Studio 2017 (Unterstützung für ClangFormat in Visual Studio 2017).For more information, see ClangFormat Support in Visual Studio 2017.
Nicht-MSBuild-Projekte mit „Ordner öffnen“Non-MSBuild projects with Open Folder
In Visual Studio 2017 wurde das Feature Ordner öffnen eingeführt.Visual Studio 2017 introduces the Open Folder feature. Dieses Feature ermöglicht Ihnen das Programmieren, Erstellen von Builds und Debuggen in einem Ordner mit Quellcode, ohne dass Projektmappen oder Projekte erstellt werden müssen.It enables you to code, build, and debug in a folder containing source code without the need to create any solutions or projects. Dadurch wird der Einstieg in Visual Studio wesentlich einfacher, selbst wenn Ihr Projekt kein auf MSBuild basierendes Projekt ist.Now it's much simpler to get started with Visual Studio, even if your project isn't an MSBuild-based project. Über Ordner öffnen erhalten Sie Zugriff auf leistungsstarke Funktionen zum Bearbeiten, Erstellen und Debuggen von Code.Open Folder gives you access to powerful code understanding, editing, building, and debugging capabilities. Diese Funktionen entsprechen den Funktionen, die in Visual Studio bereits für MSBuild-Projekte verfügbar sind.They're the same ones that Visual Studio already provides for MSBuild projects. Weitere Informationen finden Sie unter Open Folder projects for C++ (Verwenden von „Ordner öffnen“ mit Projekten in Visual C++).For more information, see Open Folder projects for C++.
- Verbesserungen in der Benutzeroberfläche „Ordner öffnen“.Improvements to the Open Folder experience. Sie können die Oberfläche über diese JSON-Dateien anpassen:You can customize the experience through these .json files:
- CppProperties.json zum Anpassen des IntelliSense- und Browsererlebnisses.CppProperties.json to customize the IntelliSense and browsing experience.
- Tasks.json zum Anpassen der Buildschritte.Tasks.json to customize the build steps.
- Launch.json zum Anpassen des Debugvorgangs.Launch.json to customize the debugging experience.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Die Unterstützung für alternative Compiler und Buildumgebungen wie MinGW und Cygwin wurde verbessert.Improved support for alternative compilers and build environments such as MinGW and Cygwin. Weitere Informationen finden Sie unter Using MinGW and Cygwin with Visual C++ and Open Folder (Verwenden von MinGW und Cygwin mit Visual C++ und „Ordner öffnen“).For more information, see Using MinGW and Cygwin with Visual C++ and Open Folder.
- Unterstützung für das Definieren von globalen und konfigurationsspezifischen Umgebungsvariablen in „CppProperties.json“ und „CMakeSettings.json“ wurde hinzugefügt.Added support to define global and configuration-specific environment variables in CppProperties.json and CMakeSettings.json. Diese Umgebungsvariablen können von in „launch.vs.json“ definierten Debugkonfigurationen und von Aufgaben in „tasks.vs.json“ verwendet werden.These environment variables can be consumed by debug configurations defined in launch.vs.json and tasks in tasks.vs.json. Weitere Informationen finden Sie unter Anpassen Ihrer Umgebung mit Visual C++ und „Ordner öffnen“.For more information, see Customizing your Environment with Visual C++ and Open Folder.
- Unterstützung für den Ninja-Generator von CMake wurde verbessert, einschließlich der Möglichkeit, ganz einfach 64-Bit-Plattformen als Ziel zu verwenden.Improved support for CMake's Ninja generator, including the ability to easily target 64-bit platforms.
Unterstützung von CMake über „Ordner öffnen“CMake support via Open Folder
Visual Studio 2017 führt die Unterstützung für die Verwendung von CMake-Projekten ohne Konvertierung in MSBuild-Projektdateien (.vcxproj) ein.Visual Studio 2017 introduces support for using CMake projects without converting to MSBuild project files (.vcxproj). Weitere Informationen finden Sie unter CMake-Projekte in Visual Studio.For more information, see CMake projects in Visual Studio. Durch Öffnen von CMake-Projekten mit Ordner öffnen wird die Umgebung für die Bearbeitung, Erstellung und das Debuggen von C++ automatisch konfiguriert.Opening CMake projects with Open Folder automatically configures the environment for C++ editing, building, and debugging.
C++-IntelliSense funktioniert, ohne dass Sie eine „CppProperties.json“-Datei im Stammordner erstellen müssen.C++ IntelliSense works without the need to create a CppProperties.json file in the root folder. Wir haben darüber hinaus ein neues Dropdownmenü hinzugefügt, sodass Benutzer einfach zwischen von CMake- und CppProperties.json-Dateien bereitgestellten Konfigurationen wechseln können.We've also added a new dropdown to allow users to easily switch between configurations provided by CMake and CppProperties.json files.
Weitere Konfigurationen werden über eine Datei „CMakeSettings.json“ unterstützt, die sich im gleichen Ordner wie die Datei „CMakeLists.txt“ befindet.Further configuration is supported via a CMakeSettings.json file that sits in the same folder as the CMakeLists.txt file.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Unterstützung für den Ninja-Generator von CMake wurde hinzugefügt.Support added for the CMake Ninja generator.
Visual Studio 2017 Version 15.4Visual Studio 2017 version 15.4
- Unterstützung für das Importieren von vorhandenen CMake-Caches wurde hinzugefügt.Support added for importing existing CMake caches.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
- Unterstützung für CMake 3.11, die Codeanalyse in CMake-Projekten, die Ansicht „Ziele“ im Projektmappen-Explorer, die Optionen zur Cachegenerierung und die Kompilierung von Einzeldateien wurde hinzugefügt.Support added for CMake 3.11, code analysis in CMake projects, Targets view in Solution Explorer, options for cache generation, and single file compilation. Weitere Informationen finden Sie im Blogbeitrag CMake Support in Visual Studio – Targets View, Single File Compilation, and Cache Generation Settings (CMake-Unterstützung in Visual Studio: Ansicht „Ziele“, Kompilierung von Einzeldateien und Einstellungen für Cachegenerierung) und CMake-Projekte in Visual Studio.For more information, see CMake Support in Visual Studio and CMake projects in Visual Studio.
Windows-DesktopentwicklungWindows desktop development
Die Installationsoberfläche ermöglicht bei der Installation der ursprünglichen C++-Arbeitsauslastung jetzt eine feinere Abstimmung.We now provide a more granular installation experience for installing the original C++ workload. Wir haben auswählbare Komponenten hinzugefügt, sodass Sie nur die Tools installieren können, die Sie benötigen.We have added selectable components that enable you to install just the tools that you need. Die angegebenen Installationsgrößen für die im Installationsprogramm aufgeführten Komponenten sind falsch, sodass die Gesamtgröße unterschätzt wird.The indicated installation sizes for the components listed in the installer UI are incorrect, and underestimate the total size.
Wenn Sie Win32-Projekte erfolgreich in der C++-Desktoparbeitsauslastung erstellen möchten, müssen Sie ein Toolset und ein Windows SDK installieren.To successfully create Win32 projects in the C++ desktop workload, you must install both a toolset and a Windows SDK. Zum Installieren der empfohlenen (ausgewählten) Komponenten benötigen Sie VC++ 2017 c141 Toolset (x86, x64) und Windows 10 SDK (10.0.nnnnn) .Install the recommended (selected) components VC++ 2017 v141 toolset (x86, x64) and Windows 10 SDK (10.0.nnnnn) to make sure it works. Sollten die erforderlichen Tools nicht installiert sein, werden Projekte nicht erfolgreich erstellt. Außerdem reagiert der Assistent nicht mehr.If the necessary tools aren't installed, projects won't be created successfully, and the wizard will stop responding.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Die Visual C++ Build-Tools (zuvor als eigenständiges Produkt verfügbar) sind jetzt als Workload im Visual Studio-Installer enthalten.The Visual C++ Build tools (previously available as a standalone product) are now included as a workload in the Visual Studio Installer. Diese Workload installiert nur die Tools, die zum Erstellen von C++-Projekten ohne Installation der Visual Studio-IDE erforderlich sind.This workload installs only the tools required to build C++ projects without installing the Visual Studio IDE. Die Toolsets v140 und v141 sind beide enthalten.Both the v140 and v141 toolsets are included. Das v141-Toolset enthält die neuesten Verbesserungen in Version 15.5 von Visual Studio 2017.The v141 toolset contains the latest improvements in Visual Studio 2017 version 15.5. Weitere Informationen finden Sie unter Visual Studio Build Tools enthalten nun die MSVC-Toolsets VS2017 und VS2015.For more information, see Visual Studio Build Tools now include the VS2017 and VS2015 MSVC Toolsets.
Linux-Entwicklung mit C++Linux development with C++
Die beliebte Erweiterung Visual C++ für Linux-Entwicklung ist nun Bestandteil von Visual Studio.The popular extension Visual C++ for Linux Development is now part of Visual Studio. Diese Installation bietet alles, was Sie zum Entwickeln und Debuggen von C++-Anwendungen in einer Linux-Umgebung benötigen.This installation provides everything you need to develop and debug C++ applications running on a Linux environment.
Visual Studio 2017 Version 15.2Visual Studio 2017 version 15.2
Verbesserungen für plattformübergreifende gemeinsame Codenutzung und Typvisualisierung.Improvements have been made in cross-platform code sharing and type visualization. Weitere Informationen finden Sie unter Linux C++ improvements for cross-platform code sharing and type visualization (Linux C++ – Verbesserungen für plattformübergreifende gemeinsame Codenutzung und Typvisualisierung).For more information, see Linux C++ improvements for cross-platform code sharing and type visualization.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
- Die Linux-Workload hat Unterstützung für rsync als Alternative zu sftp hinzugefügt, um Dateien auf Linux-Remotecomputern zu synchronisieren.The Linux workload has added support for rsync as an alternative to sftp for synchronizing files to remote Linux machines.
- Unterstützung für Kreuzkompilierung für ARM-Mikrocontroller wurde hinzugefügt.Support is added for cross compilation targeting ARM microcontrollers. Um dies in der Installation zu aktivieren, wählen Sie Linux-Entwicklung mit der C++-Workload und dann die Option für Eingebettete und IoT-Entwicklung aus.To enable it in the installation, choose the Linux development with C++ workload and select the option for Embedded and IoT Development. Durch diese Option werden die ARM GCC-Kreuzkompilierungstools und Make Ihrer Installation hinzugefügt.This option adds the ARM GCC cross compilation tools and Make to your installation. Weitere Informationen finden Sie unter ARM GCC-Kreuzkompilierung in Visual Studio.For more information, see ARM GCC Cross Compilation in Visual Studio.
- Unterstützung für CMake wurde hinzugefügt.Support added for CMake. Sie können nun an Ihrer bestehenden CMake-Codebasis arbeiten, ohne sie in ein Visual Studio-Projekt konvertieren zu müssen.You can now work on your existing CMake code base without having to convert it to a Visual Studio project. Weitere Informationen finden Sie unter Konfigurieren eines Linux CMake-Projekts.For more information, see Configure a Linux CMake Project.
- Unterstützung für das Ausführen von Remotetasks wurde hinzugefügt.Support added for running remote tasks. Mit dieser Funktion können Sie jeden Befehl auf einem Remotesystem ausführen, das im Verbindungs-Manager von Visual Studio definiert ist.This capability allows you to run any command on a remote system that is defined in Visual Studio's Connection Manager. Remotetasks bieten auch die Möglichkeit zum Kopieren von Dateien auf das Remotesystem.Remote tasks also provide the capability to copy files to the remote system. Weitere Informationen finden Sie unter Konfigurieren eines Linux CMake-Projekts.For more information, see Configure a Linux CMake Project.
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
- Verschiedene Verbesserungen für Linux-Workload-Szenarios.Various improvements to Linux workload scenarios. Weitere Informationen finden Sie unter Linux C++ Workload improvements to the Project System, Linux Console Window, rsync and Attach to Process (Verbesserungen der Linux-C++-Workload für das Projektsystem, die Linux-Konsole, Windows, rsync und „An den Prozess anhängen“).For more information, see Linux C++ Workload improvements to the Project System, Linux Console Window, rsync and Attach to Process.
- IntelliSense für Header in Linux-Remoteverbindungen.IntelliSense for headers on remote Linux connections. Weitere Informationen finden Sie unter IntelliSense for Remote Linux Headers (IntelliSense für Linux-Remoteheaders) und Konfigurieren eines Linux-CMake-Projekts.For more information, see IntelliSense for Remote Linux Headers and Configure a Linux CMake Project.
Spieleentwicklung mit C++Game development with C++
Verwenden Sie die volle Leistung von C++, um professionelle Spiele zu erstellen, die von DirectX oder Cocos2d unterstützt werden.Use the full power of C++ to build professional games powered by DirectX or Cocos2d.
Mobile Entwicklung mit C++ für Android und iOSMobile development with C++ for Android and iOS
Sie können nun mithilfe von Visual Studio mobile Apps erstellen und debuggen, die auf Android und iOS ausgerichtet sind.You can now create and debug mobile apps using Visual Studio that can target Android and iOS.
Universelle Windows-AppsUniversal Windows Apps
C++ wird als optionale Komponente für die Arbeitsauslastung der Universellen Windows-App bereitgestellt.C++ comes as an optional component for the Universal Windows App workload. Aktuell müssen C++-Projekte manuell aktualisieren werden.Currently, you must upgrade C++ projects manually. Sie können ein Projekt für die Universelle Windows-Plattform mit dem Ziel v140 in Visual Studio 2017 öffnen.You can open a v140-targeted Universal Windows Platform project in Visual Studio 2017. Wenn Visual Studio 2015 nicht installiert ist, müssen Sie das v141-Plattformtoolset jedoch auf den Projekteigenschaftenseiten auswählen.However, you need to select the v141 platform toolset in the project property pages if you don't have Visual Studio 2015 installed.
Neue Optionen für C++ auf der universellen Windows-Plattform (UWP)New options for C++ on Universal Windows Platform (UWP)
Ihnen stehen nun neue Optionen zum Schreiben und Packen von C++-Anwendungen für die Universelle Windows-Plattform und den Microsoft Store zur Verfügung: Mit der Desktop Bridge-Infrastruktur können Sie Ihre vorhandene Desktopanwendung oder das COM-Objekt für die Bereitstellung über den Microsoft Store packen.You now have new options for writing and packaging C++ applications for the Universal Windows Platform and the Windows Store: The Desktop Bridge infrastructure lets you package your existing desktop application or COM object for deployment through the Windows Store. Oder für die Bereitstellung über Ihre vorhandenen Kanäle mittels Querladen.Or, for deployment through your existing channels via side-loading. Mit den neuen Funktionen in Windows 10 können Sie Ihre Desktopanwendung auf unterschiedliche Weise um die Funktionalität der universellen Windows-Plattform (UWP) erweitern.New capabilities in Windows 10 enable you to add UWP functionality to your desktop application in various ways. Weitere Informationen finden Sie unter Desktop Bridge.For more information, see Desktop Bridge.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Eine Projektvorlage Paketerstellungsprojekt für Windows-Anwendungen wurde hinzugefügt, die die Paketerstellung von Desktopanwendungen mithilfe von Desktop Bridge unterstützt.A Windows Application Packaging Project project template is added, which greatly simplifies packaging of desktop applications with Desktop Bridge. Sie ist unter Datei > Neu > Projekt > Installiert > Visual C++ > Universelle Windows-Plattform verfügbar.It's available under File | New | Project | Installed | Visual C++ | Universal Windows Platform. Weitere Informationen finden Sie unter Packen einer App mit Visual Studio (Desktop Bridge).For more information, see Package an app by using Visual Studio (Desktop Bridge).
Beim Schreiben von neuem Code können Sie nun C++/WinRT verwenden. Dies ist eine C++-Standardsprachprojektion für Windows-Runtime (WinRT), die nur in Headerdateien implementiert wird.When writing new code, you can now use C++/WinRT, a standard C++ language projection for the Windows Runtime implemented solely in header files. Mit ihr können Sie Windows-Runtime-APIs mit jedem standardkonformen C++-Compiler nutzen und erstellen.It allows you to consume and author Windows Runtime APIs using any standards-compliant C++ compiler. C++/WinRT wurde dafür konzipiert, C++-Entwicklern erstklassigen Zugriff auf die moderne Windows-API zur Verfügung zu stellen.C++/WinRT is designed to provide C++ developers with first-class access to the modern Windows API. Weitere Informationen finden Sie unter C++/WinRT.For more information, see C++/WinRT.
Ab Build 17025 der Windows SDK Insider Preview ist C++/WinRT im Windows SDK enthalten.Starting in build 17025 of the Windows SDK Insider Preview, C++/WinRT is included in the Windows SDK. Weitere Informationen finden Sie unter C++/WinRT ist jetzt im Windows SDK enthalten.For more information, see C++/WinRT is now included the Windows SDK.
Das Clang/C2-PlattformtoolsetThe Clang/C2 platform toolset
Das Clang/C2-Toolset, das im Lieferumfang von Visual Studio 2017 enthalten ist, unterstützt jetzt die Option /bigobj
, die für das Erstellen großer Projekte entscheidend ist.The Clang/C2 toolset that ships with Visual Studio 2017 now supports the /bigobj
switch, which is crucial for building large projects. Es umfasst außerdem eine Reihe wichtiger Fehlerbehebungen, sowohl im Front-End als auch im Back-End des Compilers.It also includes several important bug fixes, both in the compiler front-end and back-end.
C++-CodeanalyseC++ code analysis
Visual Studio liefert nun die C++-Kernprüfungen zum Erzwingen der C++-Kernrichtlinien.The C++ Core Checkers for enforcing the C++ Core Guidelines are now distributed with Visual Studio. Aktivieren Sie die Prüfungen auf den Projekteigenschaftenseiten in den Erweiterungen für die Codeanalyse.Enable the checkers in the Code Analysis Extensions page in the project's property pages. Die Erweiterungen werden dann beim Ausführen der Codeanalyse eingeschlossen.The extensions are then included when you run code analysis. Weitere Informationen finden Sie unter Verwenden der C++-Core-Richtlinienprüfungen.For more information, see Using the C++ Core Guidelines checkers.
Visual Studio 2017 Version 15.3Visual Studio 2017 version 15.3
- Es wurde Unterstützung für Regeln in Bezug auf die Ressourcenverwaltung hinzugefügt.Support added for rules related to resource management.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Neue C++ Core Guidelines-Überprüfungen umfassen die Richtigkeit von intelligenten Zeigern, die richtige Verwendung von globalen Initialisierern und die Kennzeichnung der Verwendung von Konstrukten wie
goto
und fehlerhaften Umwandlungen.New C++ Core Guidelines checks cover smart pointer correctness, correct use of global initializers, and flagging uses of constructs likegoto
and bad casts.Einige Warnnummern, die in Version 15.3 vorhanden waren, sind in Version 15.5 nicht mehr verfügbar.Some warning numbers you may find in 15.3 are no longer available in 15.5. Diese Warnungen wurden durch genauere Überprüfungen ersetzt.These warnings were replaced with more specific checks.
Visual Studio 2017 Version 15.6Visual Studio 2017 version 15.6
- Unterstützung für die Analyse von Einzeldateien hinzugefügt und Verbesserungen der Laufzeitleistung der Analyse vorgenommen.Support added for single-file analysis, and improvements in analysis run-time performance. Weitere Informationen finden Sie unter C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2 (Verbesserungen an der statischen C++-Analyse für Visual Studio 2017-Version 15.6, Vorschauversion 2)For more information, see C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
- Unterstützung für
/analyze:ruleset
hinzugefügt. So können Sie angeben, welche Codeanalyseregeln ausgeführt werden sollen.Support added for/analyze:ruleset
, which lets you specify the code analysis rules to run. - Unterstützung für zusätzliche C++ Core Guidelines-Regeln hinzugefügt.Support added for additional C++ Core Guidelines rules. Weitere Informationen finden Sie unter Verwenden der C++-Core-Richtlinienprüfungen.For more information, see Using the C++ Core Guidelines checkers.
Komponententests in Visual Studio 2017Unit testing in Visual Studio 2017
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
Google Test Adapter und Boost.Test-Adapter sind jetzt als Komponenten der Workload Desktopentwicklung mit C++ verfügbar.Google Test Adapter and Boost.Test Adapter are now available as components of the Desktop Development with C++ workload. Sie sind in den Test-Explorer integriert.They're integrated with Test Explorer. CTest-Unterstützung wurde für CMake-Projekte hinzugefügt (unter Verwendung von „Ordner öffnen“), obwohl die vollständige Integration in den Test-Explorer noch nicht verfügbar ist.CTest support is added for CMake projects (using Open Folder), although full integration with Test Explorer isn't available yet. Weitere Informationen finden unter Erstellen von Komponententests für C/C++.For more information, see Writing unit tests for C/C++.
Visual Studio 2017 Version 15.6Visual Studio 2017 version 15.6
- Unterstützung für dynamische
Boost.Test
-Bibliotheksunterstützung hinzugefügt.Support added forBoost.Test
dynamic library support. - In der IDE steht jetzt eine
Boost.Test
-Elementvorlage zur Verfügung.ABoost.Test
item template is now available in the IDE.
Weitere Informationen finden Sie unter Boost.Test
Unit Testing: Dynamic Library support and New Item Template (Komponententests mit Boost.Test: Unterstützung für dynamische Bibliotheken und neue Elementvorlagen).For more information, see Boost.Test
Unit Testing: Dynamic Library support and New Item Template.
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7
Unterstützung für CodeLens für C++-Komponententestprojekte hinzugefügt.CodeLens support added for C++ unit test projects. Weitere Informationen finden Sie unter Announcing CodeLens for C++ Unit Testing (Ankündigung: CodeLens für C++-Unittests).For more information, see Announcing CodeLens for C++ Unit Testing.
Visual Studio-GrafikdiagnoseVisual Studio graphics diagnostics
Visual Studio-Grafikdiagnosetools: Mit diesen Tools können Sie Rendering- und Leistungsprobleme bei Direct3D-Apps erfassen und analysieren.Visual Studio Graphics Diagnostics tools: You can use them to record and analyze rendering and performance problems in Direct3D apps. Verwenden Sie sie für Apps, die lokal auf Ihrem Windows-PC, in einem Windows-Geräteemulator oder auf einem Remotecomputer oder -gerät ausgeführt werden.Use them on apps that run locally on your Windows PC, in a Windows device emulator, or on a remote PC or device.
Ein- und Ausgabe von Vertex- und Geometrieshadern: Die Möglichkeit der Anzeige der Ein- und Ausgabe von Vertex- und Geometrieshadern war eines der am häufigsten gewünschten Features.Input & Output for Vertex and Geometry shaders: The ability to view input and output of vertex shaders and geometry shaders has been one of the most requested features. Dieses Feature wird nun in den Tools unterstützt.It's now supported in the tools. Wählen Sie die VS- oder GS-Phase in der Ansicht „Pipelinestufen“, um mit dem Untersuchen der Ein- und Ausgabe in der nachstehenden Tabelle zu beginnen.Select the VS or GS stage in the Pipeline Stages view to start inspecting its input and output in the table below.
Suchen und Filtern in der Objekttabelle: Diese Option stellt eine schnelle und einfache Möglichkeit dar, die gesuchten Ressourcen zu finden.Search and filter in the object table: Provides a quick and easy way to find the resources you're looking for.
Ressourcenverlauf: In dieser neue Ansicht wurde der gesamte Änderungsverlaufs einer Ressource und deren Verwendung während des Renderns eines aufgezeichneten Frames optimiert.Resource History: This new view provides a streamlined way of seeing the entire modification history of a resource as it was used during the rendering of a captured frame. Um den Verlauf für jede Ressource aufzurufen, klicken Sie auf das Uhrsymbol neben jeden Ressourcenlink.To invoke the history for any resource, click the clock icon next to any resource hyperlink.
Dadurch wird das Toolfenster Ressourcenverlauf angezeigt, in dem sich der Änderungsverlauf der Ressource befindet.It displays the new Resource History tool window, populated with the change history of the resource.
Sie können Frames bei aktivierter Erfassung der vollständigen Aufrufliste erfassen.You can capture frames with full call stack capturing enabled. Dadurch können Sie im Handumdrehen den Kontext der einzelnen Änderungsereignisse ableiten und innerhalb Ihres Visual Studio-Projekts untersuchen.That lets you quickly deduce the context of each change event, and inspect it within your Visual Studio project. Die Option zur Erfassung der vollständigen Liste wird in Visual Studio im Dialogfeld Tools > Optionen unter Grafikdiagnose festgelegt.Set the full stack capture option in the Visual Studio Tools > Options dialog under Graphics Diagnostics.
API-Statistiken: Eine allgemeine Zusammenfassung der API-Verwendung in Ihrem Frame.API Statistics: View a high-level summary of API usage in your frame. Dies kann beim Ermitteln von Aufrufen nützlich sein, von denen Sie nicht wissen, dass sie erfolgen, oder von Aufrufen, die zu häufig erfolgen.It's handy for discovering calls you may not realize you're making at all, or calls you're making too often. Dieses Fenster steht über Ansicht > API Statistiken in der Visual Studio-Grafikanalyse zur Verfügung.This window is available via View > API Statistics in Visual Studio Graphics Analyzer.
Speicherstatistiken: Diese Option stellt dar, wie viel Arbeitsspeicher der Treiber für die Ressourcen reserviert, die Sie im Frame erstellen.Memory Statistics: View how much memory the driver allocates for the resources you create in the frame. Dieses Fenster steht über Ansicht > Speicherstatistiken in der Visual Studio-Grafikanalyse zur Verfügung.This window is available via View > Memory Statistics in Visual Studio Graphics Analyzer. Um Daten zur Anzeige in einer Tabellenkalkulation in eine CSV-Datei zu kopieren, klicken Sie mit der rechten Maustaste, und wählen Sie Alles kopieren.To copy data to a CSV file for viewing in a spreadsheet, right-click and choose Copy All.
Frame-Überprüfung: Mit dieser neuen Liste mit Fehlern und Warnungen können Sie je nach Problem, das auf Direct3D-Debugebene erkannt wurde, einfach zu Ihrer Ereignisliste navigieren.Frame Validation: The new errors and warnings list provides an easy way to navigate your event list based on potential issues detected by the Direct3D debug layer. Klicken Sie zum Öffnen des Fensters in der Visual Studio-Grafikanalyse auf Ansicht > Frame-Überprüfung.Click View > Frame Validation in Visual Studio Graphics Analyzer to open the window. Klicken Sie dann auf Überprüfung ausführen, um die Analyse zu starten.Then click Run Validation to start the analysis. Je nach Komplexität des Frames kann dieser Vorgang mehrere Minuten dauern.It can take several minutes to complete, depending on the frame's complexity.
Frame-Analyse für D3D12: Verwenden Sie die Frame-Analyse zum Analysieren der Leistung von Zeichenvorgängen mit „Was-wäre-wenn“-Experimenten.Frame Analysis for D3D12: Use Frame Analysis to analyze draw-call performance with directed "what-if" experiments. Wechseln Sie zur Registerkarte „Frame-Analyse“, und führen Sie Analysen aus, um den Bericht anzuzeigen.Switch to the Frame Analysis tab and run analysis to view the report. Weitere Informationen finden Sie im Video GoingNative 25: Visual Studio Graphics Frame Analysis (GoingNative 25: Grafikframe-Analyse in Visual Studio).For more details, watch the GoingNative 25: Visual Studio Graphics Frame Analysis video.
Verbesserungen der GPU-Nutzung: Öffnen Sie Ablaufverfolgungen, die über den Visual Studio-Profiler für GPU-Nutzung mit dem Tool „GPU-Ansicht“ oder Windows Performance Analyzer (WPA) erstellt wurden, um eine ausführlichere Analyse zu erhalten.GPU Usage Improvements: Open traces can be taken via the Visual Studio GPU Usage profiler with either GPU View or the Windows Performance Analyzer (WPA) tool for more detailed analysis. Wenn das Windows Performance Toolkit installiert ist, sind rechts unten in der Sitzungsübersicht zwei Links vorhanden: einer für WPA und einer für die GPU-Ansicht.If you have the Windows Performance Toolkit installed, there are two hyperlinks: one for WPA and another for GPU View, at the bottom right of the session overview.
Ablaufverfolgungen, die über diesen Link in der GPU-Ansicht geöffnet werden, unterstützen das synchronisierte Zoomen und Schwenken auf der Zeitachse in Visual Studio und der GPU-Ansicht.Traces you open in GPU View via this link support synchronized VS and GPU View timeline zooming and panning. Über ein Kontrollkästchen in Visual Studio wird festgelegt, ob die Synchronisierung aktiviert ist oder nicht.A checkbox in VS controls whether synchronization is enabled or not.
Eine vollständige Liste der Neuerungen bis zum Visual Studio 2015 Update 3 finden Sie unter Visual C++: Neuerungen von 2003 bis 2015.For the complete list of what's new through Visual Studio 2015 Update 3, see Visual C++ What's New 2003 through 2015.
Weitere Informationen zu Neuerungen in Visual Studio 2015 finden Sie in den Versionshinweisen.For more information on what's new in all of Visual Studio 2015, see the release notes. Sie sind im Verlauf der Versionshinweise zu Visual Studio 2015 verlinkt.They're linked from Visual Studio 2015 Release Notes History.
Weitere Informationen zu Neuerungen für C++ in Visual Studio 2019 finden Sie unter Neuerungen bei C++ in Visual Studio.For information on what's new for C++ in Visual Studio 2019, see What's new for C++ 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.For information on what's new for C++ in Visual Studio 2017, see What's new for C++ in Visual Studio 2017.