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 und std::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 for std::function and std::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 von std::copy oder bei der Erstellung von std::vector- und std::string-ObjektenImproved optimization of code using memmove, such as std::copy or std::vector and std::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, der std::out_of_range verwendet, jetzt ggf. #include <stdexcept> hinzugefügt werden.For example, code that uses std::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 uses if 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 von std::thread sechs Funktionen zwischen _beginthreadex und dem angegebenen aufrufbaren Objekt eingefügt.Previously std::thread put six functions between _beginthreadex and the supplied callable object. Diese Zahl wurde auf drei reduziert (zwei davon sind lediglich std::invoke).This number has been reduced to only three, two of which are just std::invoke. Darüber hinaus wird mit dieser Änderung ein rätselhafter Zeitsteuerungsfehler behoben, bei dem ein Konstruktor von std::thread hängt, wenn die Systemuhr genau während der Erstellung eines std::thread-Elements geändert wird.This change also resolves an obscure timing bug, where a std::thread constructor would stop responding if the system clock changed at the exact moment the std::thread was being created.

  • Es wurde ein Leistungsverlust in std::hash behoben, der sich aus der Implementierung von std::hash<std::filesystem::path> ergeben hat.Fixed a performance regression in std::hash that we introduced when implementing std::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 in std::bitset caused by a conditional throw inside a noexcept function was fixed by factoring out the throwing path.

  • Für die std::list- und std::unordered_*-Familie werden Iteratoren ohne Debugging intern an mehr Stellen verwendet.The std::list and std::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.Several std::list members were changed to reuse list nodes where possible rather than deallocating and reallocating them. Bei einem list<int>, der bereits eine Größe von 3 hat, überschreibt ein Aufruf von assign(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 a list<int> that already has a size of 3, a call to assign(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 in clear() geändert.All standard library calls to erase(begin(), end()) were changed to clear().

  • 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 to std::variant to make it more optimizer-friendly, resulting in better generated code. Codeinlining mit std::visit ist nun deutlich effizienter.Code inlining is now much better with std::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 once vcpkg 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.The cmakeToolchain 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

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

Visual Studio 2019 Version 16.1Visual Studio 2019 version 16.1

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 stattdessen co_yield verwendet wird.Your code should be updated to use co_yield instead. Weitere Informationen finden Sie im Schlüsselwort yield, das in VS 2017 co_yield wird.For more information, see yield keyword to become co_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

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.Minor basic_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 the std::promise move assignment operator, which previously could cause code to block forever.
  • Compilerfehler bei der impliziten Konvertierung von atomic<T*> in T* wurden behoben.Fixed compiler errors with the atomic<T*> implicit conversion to T*.
  • pointer_traits<Ptr> erkennt jetzt ordnungsgemäß Ptr::rebind<U>.pointer_traits<Ptr> now correctly detects Ptr::rebind<U>.
  • Ein fehlender const -Qualifizierer im move_iterator-Subtraktionsoperator wurde ergänzt.Fixed a missing const qualifier in the move_iterator subtraction operator.
  • Die lautlose, ungültige Codegenerierung für zustandsbehaftete benutzerdefinierte Allokatoren, die propagate_on_container_copy_assignment und propagate_on_container_move_assignment anfordern, wurde korrigiert.Fixed silent bad codegen for stateful user-defined allocators requesting propagate_on_container_copy_assignment and propagate_on_container_move_assignment.
  • atomic<T> toleriert nun den überladenen operator&().atomic<T> now tolerates overloaded operator&().
  • Compilerdiagnosen für falsche bind()-Aufrufe wurden leicht verbessert.Slightly improved compiler diagnostics for incorrect bind() 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() an numeric_limits<difference_type>::max(), anstatt max() an size_type.Standard library containers now clamp their max_size() to numeric_limits<difference_type>::max() rather than the max() of size_type. Dadurch wird sichergestellt, dass das Ergebnis von distance() in Iteratoren von diesem Container im Rückgabetyp von distance() darstellbar ist.This change ensures that the result of distance() on iterators from that container is representable in the return type of distance().
  • Fehlende Spezialisierung wurde behoben: auto_ptr<void>.Fixed missing specialization auto_ptr<void>.
  • Bei den Algorithmen for_each_n(), generate_n() und search_n() war in der Vergangenheit keine Kompilierung möglich, wenn es sich beim Längenargument nicht um einen integralen Typ handelte.The for_each_n(), generate_n(), and search_n() algorithms previously failed to compile if the length argument wasn't an integral type. Es wird nun versucht, nicht integrale Längen in einen difference_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öße npos anstatt max_size() verwendet wurde.Fixed some basic_string operations that used npos instead of max_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 das future-Objekt ungültig, so wie es der Standard erfordert.future::get() now invalidates the future, 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 von iterator_traits in "is iterator" SFINAE-Bedingungen zuzulassen.iterator_traits<void *> used to be a hard error because it attempted to form void&; it now cleanly becomes an empty struct to allow use of iterator_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 marked noexcept (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 mit noexcept gekennzeichnet.Many vector<bool> operations are now marked noexcept.
  • 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 allocator value_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 into basic_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 vom propagate_on_container_swap der Zuweisung beeinträchtigt.basic_string::shrink_to_fit() is no longer affected by the allocator's propagate_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.Improved std::list debug checks. Listeniteratoren überprüfen jetzt operator->(), und list::unique() markiert Iteratoren jetzt als ungültig.List iterators now check operator->(), and list::unique() now marks iterators as invalidated.
  • Die Metaprogrammierung von „uses-allocator“ wurde im tuple korrigiert.Fixed uses-allocator metaprogramming in tuple.
Visual Studio 2017 Version 15.5Visual Studio 2017 version 15.5
  • std::partition ruft nun in Übereinstimmung mit dem Standard das Prädikat N Mal anstatt N + 1 Mal auf.std::partition now calls the predicate N times instead of N + 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, dass T standardmäßig konstruierbar ist.std::atomic<T> no longer requires T 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 als max_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 than max_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() und make_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ür min(initializer_list), max(initializer_list) und minmax(initializer_list) sowie min_element(), max_element() und minmax_element() aktiviert.Enabled C++14 constexpr in min(initializer_list), max(initializer_list), and minmax(initializer_list), and min_element(), max_element(), and minmax_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() und rethrow_if_nested() erfordern grundsätzlich dynamic_cast . Daher kennzeichnet die Standardbibliothek sie jetzt unter /GR- als =delete.Both dynamic_pointer_cast() and rethrow_if_nested() inherently require dynamic_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 von typeid(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 of typeid(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 werden std::any, die Memberfunktionen target() und target_type() von std::function sowie die Friend-Memberfunktionen get_deleter() von std::shared_ptr und std::weak_ptr deaktiviert.This flag also disables std::any, the target() and target_type() member functions of std::function, and the get_deleter() friend member function of std::shared_ptr and std::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++14 constexpr 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 von nullptr_t{}.The standard library now uses nullptr internally, instead of nullptr_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 von std::forward().The standard library now uses std::move() internally, instead of stylistically misusing std::forward().
  • static_assert(false, "message") wurde in #error message geändert.Changed static_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(), die fputs() 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 called fputs() 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-ZuweisungDeleting polymorphic_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 rufen traits::find nur einmalig auf.Made basic_string::find(char) overloads only call traits::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 in basic_string, which was difficult for the compiler optimizer to analyze. Bei kurzen Zeichenfolgen verursacht der Aufruf von reserve auch dann Kosten, wenn keine Arbeit erledigt wird.For all short strings, calling reserve 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 über move_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 via move_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.Improved weak_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 und std::wstring wurde um mehr als das Dreifache verbessert.Improved the performance of std::string and std::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 der std::atomic-Implementierung in Funktionen verhindert haben, die die strukturierte Ausnahmebehandlung verwenden, wurde eine Problemumgehung eingeführt.Worked around interactions with noexcept, which prevented inlining the std::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.Changed std::try_lock() to use pack expansion instead of recursion.
  • Der Algorithmus von std::lock() zum Verhindern von Deadlocks wurde verbessert und verwendet jetzt lock()-Vorgänge, anstatt alle try_lock() auf allen Sperren zu durchlaufen.Improved the std::lock() deadlock avoidance algorithm to use lock() operations instead of spinning on try_lock() on all the locks.
  • Die Optimierung von benannten Rückgabewerten in system_category::message() wurde aktiviert.Enabled the Named Return Value Optimization in system_category::message().
  • conjunction und disjunction instanziieren jetzt N + 1-Typen anstatt 2N + 2-Typen.conjunction and disjunction now instantiate N + 1 types, instead of 2N + 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 an std::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 to std::function.
  • allocator_traits<std::allocator> enthält manuelle std::allocator-Inlinevorgänge und verringert die Codegröße in Code, der mit std::allocator nur über allocator_traits interagiert (dies gilt für den Großteil von Codes).allocator_traits<std::allocator> contains manually inlined std::allocator operations, reducing code size in code that interacts with std::allocator through allocator_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 calling allocator_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 customized allocator::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ür shrink_to_fit() und reserve() befindet sich nicht mehr im Pfad für Neuzuweisungsvorgänge, wodurch der Codeumfang für alle mutierenden Member reduziert wird.The basic_string internal shrink path for shrink_to_fit() and reserve() 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 von shrink_to_fit().The basic_string internal grow path is no longer in the path of shrink_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.The basic_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.The basic_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 the errno address to remove repeated interaction with TLS.
  • Die Implementierung von is_pointer wurde vereinfacht.Simplified the is_pointer implementation.
  • Die Umstellung von SFINAE für Ausdrücke von einer Funktionsbasis auf eine struct - und void_t-Basis wurde abgeschlossen.Finished changing function-based Expression SFINAE to struct and void_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 von memcmp und memcpy sowie ähnlichen Optimierungen, die von basic_string<wchar_t> verwendet werden.basic_string<char16_t> now engages the same memcmp, memcpy, and similar optimizations that basic_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 of lower_bound(iter, iter, function pointer).
  • Der Mehraufwand für die Überprüfung der Reihenfolge von Eingaben (includes, set_difference, set_symmetric_difference und set_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 to includes, set_difference, set_symmetric_difference, and set_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 ein std::string-Element bzw. zerstört es auch nicht mehr.Constructing std::random_device no longer constructs and then destroys a std::string.
  • Für std::equal und std::partition wurde ein Jump Threading-Optimierungsdurchlauf ausgeführt, durch den ein Iteratorvergleich weniger erforderlich ist.std::equal and std::partition had a jump-threading optimization pass that saves an iterator comparison.
  • Wenn std::reverse Zeiger auf trivial kopierbares T übergeben werden, erfolgt die Ausgabe nun an eine handgeschriebene vektorisierte Implementierung.When std::reverse is passed pointers to trivially copyable T, it will now dispatch to a handwritten vectorized implementation.
  • std::fill, std::equal und std::lexicographical_compare wurden beigebracht, wie die Weiterleitung an memset und memcmp für std::byte und gsl::byte (sowie für andere char-ähnliche Enumerationen und Enumerationsklassen) funktioniert.std::fill, std::equal, and std::lexicographical_compare were taught how to dispatch to memset and memcmp for std::byte and gsl::byte (and other char-like enums and enum classes). Die Weiterleitung für std::copy erfolgt mithilfe von is_trivially_copyable. Daher sind keine Änderungen notwendig.Since std::copy dispatches using is_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.

    FehlerlisteError List

    Gefilterte FehlerlisteError List Filtered

  • Die Möglichkeit zum Filtern von Elementen der Memberliste nach Typ wurde hinzugefügt.Added the ability to filter Member List items by kind.

    Filtern der MemberlisteMember List Filtering

  • 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

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.

    CMake – Ordner öffnenCMake Open Folder

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

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

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.

Screenshot des Dialogfelds „Eigenschaftenseiten“, in dem „Konfigurationseigenschaften“ > „Codeanalyse“ > „Allgemein“ ausgewählt ist und im Abschnitt „Diesen Regelsatz ausführen“ eine Reihe von Core-Prüfungen aufgeführt werdenScreenshot of the Property Pages dialog box showing Configuration Properties > Code Analysis > General selected and a number of Core Checks listed in teh Run this rule set section.

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 like goto 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
Visual Studio 2017-Version 15.7Visual Studio 2017 version 15.7

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 for Boost.Test dynamic library support.
  • In der IDE steht jetzt eine Boost.Test-Elementvorlage zur Verfügung.A Boost.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.

    Ein-/Ausgabe für Shader

  • 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.

    Screenshot des Abschnitts „Objekttabelle“, in dem das Dropdown „Typ“ und das Suchfeld gekennzeichnet sind.

  • 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.

    Ressourcenverlauf

    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.

    Ressourcenverlaufsänderung

    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.

    API-Statistiken

  • 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.

    Speicherstatistiken

  • 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-Überprüfung

  • 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.

    Frame-Analyse

  • 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.

    GPU-Nutzung

    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.

    GPU-Ansicht

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.