Neuerungen bei C++ in Visual Studio 2017
Visual Studio 2017 RC enthält viele Updates und Problembehebungen der C++-Umgebung. Es wurden mehr als 250 Fehler und Probleme mit dem Compiler sowie mit Tools behoben. Viele dieser Probleme wurden von Kunden über die Optionen Problem melden und „Vorschlag senden“ unter Feedback senden übermittelt. Vielen Dank für das Melden von Fehlern!
Weitere Informationen zu Neuerungen in Visual Studio finden Sie unter Neuerungen in Visual Studio 2017. Weitere Informationen zu Neuerungen für C++ in Visual Studio 2019 finden Sie unter Neuerungen bei C++ in Visual Studio. Weitere Informationen zu Neuerungen für C++ in Visual Studio 2015 und frühere Versionen finden Sie unter Visual C++: Neuerungen von 2003 bis 2015. Weitere Informationen zu den Neuerungen in der C++-Dokumentation finden Sie unter Microsoft C++-Dokumentation: Neuigkeiten.
Visual Studio 2017 C++-Compiler
Verbesserungen an C++ bei der Übereinstimmung mit Standards
Der C++-Compiler und die Standardbibliothek wurden in diesem Release mit verbesserter Unterstützung für C++11- und C++14-Funktionen aktualisiert. Diese Verbesserungen schließen auch vorläufige Unterstützung für bestimmte Features ein, deren Implementierung im C++17-Standard erwartet wird. Ausführliche Informationen finden Sie unter Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual C++ 2017.
Visual 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). Diese Features sind unter der Option /std:c++17
verfügbar. Weitere Informationen finden Sie unter Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio 2017.
Visual Studio 2017-Version 15.7
Das MSVC-Compilertoolset in Visual Studio-Version 15.7 erfüllt nun den 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/C++-Sprachkonformität.
Visual 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. Weitere Informationen finden Sie unter Übersicht zum neuen MSVC-Präprozessor.
Neue Compileroptionen
/permissive-
: Aktiviert alle strikten Compileroptionen für die Übereinstimmung mit Standards und deaktiviert die meisten Microsoft-spezifischen Compilererweiterungen (aber z.B. nicht__declspec(dllimport)
). Diese Option ist in Visual Studio 2017-Version 15.5 standardmäßig aktiviert. Der Konformitätsmodus/permissive-
schließt Unterstützung für die Zweiphasen-Namenssuche ein. Weitere Informationen finden Sie unter C++ Conformance Improvements in Visual Studio (Verbesserungen bei der Übereinstimmung mit C++-Standards 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./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. Die PDB-Datei zeigt stattdessen auf die Debuginformationen für das Objekt und die Bibliotheksdateien, die zum Erstellen der ausführbaren Datei verwendet wurden. 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).Visual Studio 2017 ermöglicht die Verwendung von
/sdl
mit/await
. Die/RTC
-Einschränkung mit Coroutinen wurde beseitigt.
Visual 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. Die meisten Standardfeatures des neuen Entwurfs werden von der Option/std:c++latest
geschützt./std:c++17
aktiviert die C++17-Features, die vom Compiler implementiert werden. 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. Verwenden Sie zum Aktivieren dieser Funktionen/std:c++latest
.
Codegenerierung, Sicherheit, Diagnosen und Versionsverwaltung
Dieses Release bietet mehrere Verbesserungen hinsichtlich Optimierung, Codegenerierung, Versionsverwaltung für das Toolset sowie Diagnose. Zu diesen Verbesserungen gehören folgende:
- Verbesserte Generierung von Code für Schleifen: Unterstützung der automatischen Vektorisierung der Division von konstanten Integerwerten und verbesserte Erkennung von memset-Mustern.
- Verbesserte Codesicherheit: Verbesserte Ausgabe der Compilerdiagnose eines Pufferüberlaufs.
/guard:cf
schützt jetzt switch-Anweisungen, die Sprungtabellen generieren. - Versionsverwaltung: Der Wert des integrierten Präprozessormakros _MSC_VER wird nun bei jedem Update des Visual C++-Toolsets monoton aktualisiert. Weitere Informationen finden Sie unter Visual C++-Compilerversion.
- Neues Layout des Toolsets: Der Compiler und verwandte Buildtools haben auf dem Entwicklungscomputer einen neuen Speicherort und eine neue Verzeichnisstruktur. Das neue Layout ermöglicht die parallele Installation mehrerer Versionen des Compilers. Weitere Informationen finden Sie unter Layout der Compilertools in Visual Studio 2017.
- Verbesserte Diagnose: Das Ausgabefenster zeigt jetzt die Spalte an, in der ein Fehler auftritt. Weitere Informationen finden Sie im Blogbeitrag 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. Der Code sollte so aktualisiert werden, dass stattdessenco_yield
verwendet wird. Weitere Informationen finden Sie im Schlüsselwortyield
, das in VS 2017co_yield
wird.
Visual Studio 2017 Version 15.3
Verbesserungen der Diagnose im 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).
Visual Studio 2017 Version 15.5
Die Visual C++-Laufzeitleistung wird weiterhin durch eine besser generierte Codequalität verbessert. Jetzt können Sie Ihren Code einfach neu kompilieren, und Ihre App wird schneller ausgeführt. 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. Weitere Compileroptimierungen sind Verbesserungen an bestehenden Funktionen wie Vektorisierungsheuristiken für bedingte Ausdrücke, bessere Schleifenoptimierungen und 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. Weitere Informationen finden Sie unter /OPT (Optimierungen) und /INCREMENTAL (inkrementelles Verknüpfen).
Der Microsoft C++-Compiler bietet Unterstützung für AVX-512 von Intel. Er verfügt über Anweisungen zur Vektorlänge, die neue Funktionen in AVX-512 für 128 und 256 Bit breite Register bereitstellen.
Mithilfe der Option /Zc:noexceptTypes-
können Sie zur C++14-Version von noexcept
zurückkehren, im Übrigen jedoch den C++17-Modus beibehalten. 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. Weitere Informationen dazu finden Sie unter Entfernen der dynamischen Ausnahmespezifikation und noexcept.
Visual Studio 2017-Version 15.7
- Neuer Compilerschalter /Qspectre , um Speculative-Execution-Seitenkanalangriffe zu verringern. Weitere Informationen finden Sie unter Spectre Mitigations in MSVC (Spectre-Entschärfungen in MSVC).
- Neue Diagnosewarnung für Spectre-Entschärfung. Weitere Informationen finden Sie unter Spectre diagnostic in Visual Studio 2017 Version 15.7 Preview 4 (Spectre-Diagnose in Visual Studio 2017-Version 15.7, Vorschauversion 4).
- Neuer Wert für/Zc,
/Zc:__cplusplus
: ermöglicht korrekte Berichterstattung für die Unterstützung des C++-Standards. Wenn die Option beispielsweise festgelegt ist und der Compiler sich im Modus/std:c++17
befindet, wird der Wert auf201703L
erweitert. Weitere Informationen finden Sie unter MSVC now correctly reports __cplusplus (MSVC meldet jetzt ordnungsgemäß __cplusplus).
C++-Standardbibliothek
Verbesserungen der Richtigkeit
Visual Studio 2017 RTM (Version 15.0)
- Kleinere Verbesserungen bei der Diagnose von
basic_string
_ITERATOR_DEBUG_LEVEL != 0
. Beim Auslösen einer IDL-Überprüfung in einem Zeichenfolgenmechanismus wird nun das Verhalten gemeldet, das die Überprüfung ausgelöst hat. Anstelle von „Zeichenfolgeniterator nicht dereferenzierbar“ wird „Zeichenfolgeniterator ist nicht dereferenzierbar, da er sich außerhalb des Bereichs befindet (z. B. ein Enditerator)“ angezeigt. - Der Bewegungszuweisungsoperator
std::promise
, der zuvor zum dauerhaften Blockieren von Code führen konnte, wurde korrigiert. - Compilerfehler bei der impliziten Konvertierung von
atomic<T*>
inT*
wurden behoben. pointer_traits<Ptr>
erkennt jetzt ordnungsgemäßPtr::rebind<U>
.- Ein fehlender
const
-Qualifizierer immove_iterator
-Subtraktionsoperator wurde behoben. - Die lautlose, ungültige Codegenerierung für zustandsbehaftete benutzerdefinierte Allokatoren, die
propagate_on_container_copy_assignment
undpropagate_on_container_move_assignment
anfordern, wurde korrigiert. atomic<T>
toleriert nun den überladenenoperator&()
.- Compilerdiagnosen für falsche
bind()
-Aufrufe wurden leicht verbessert.
Es sind weitere Verbesserungen an der Standardbibliothek in Visual Studio 2017 RTM verfügbar. 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).
Visual Studio 2017 Version 15.3
- Standardbibliothekscontainer binden nun ihre
max_size()
annumeric_limits<difference_type>::max()
, anstattmax()
ansize_type
. Dadurch wird sichergestellt, dass das Ergebnis vondistance()
in Iteratoren von diesem Container im Rückgabetyp vondistance()
darstellbar ist. - Fehlende Spezialisierung wurde behoben:
auto_ptr<void>
. - Bei den Algorithmen
for_each_n()
,generate_n()
undsearch_n()
war in der Vergangenheit keine Kompilierung möglich, wenn es sich beim Längenargument nicht um einen integralen Typ handelte. Es wird nun versucht, nicht integrale Längen in einendifference_type
des Iterators umzuwandeln. normal_distribution<float>
gibt in der Standardbibliothek beim Einschränken von double auf float keine Warnungen mehr aus.- Einige
basic_string
-Vorgänge wurden korrigiert, bei denen bei Überprüfung der maximalen Überlaufgrößenpos
anstattmax_size()
verwendet wurde. condition_variable::wait_for(lock, relative_time, predicate)
wartete bisher bei einer fälschlicherweise erfolgten Aktivierung die gesamte relative Zeit. Es wird nun nur für ein einzelnes Intervall der relativen Zeit gewartet.future::get()
macht jetzt dasfuture
-Objekt ungültig, so wie es der Standard erfordert.iterator_traits<void *>
war zuvor ein harter Fehler, weil versucht wurde,void&
zu formen. Es wird jetzt zu einer leeren Struktur, um die Verwendung voniterator_traits
in "is iterator" SFINAE-Bedingungen zuzulassen.- Einige von Clang
-Wsystem-headers
gemeldete Warnungen wurden behoben. - Außerdem wurde die von Clang
-Wmicrosoft-exception-spec
gemeldete Fehlermeldung „exception specification in declaration does not match previous declaration“ (Ausnahmespezifikation in der Deklaration stimmt nicht mit vorheriger Deklaration überein) behoben. - Von Clang und C1XX gemeldete mem-initializer-list-Reihenfolgewarnungen wurden ebenfalls korrigiert.
- Die unsortierten Container tauschten ihre Hashfunktionen oder Prädikate nicht, wenn die Container selbst getauscht wurden. Dies erfolgt jetzt.
- Viele swap-Vorgänge von Containern sind jetzt als
noexcept
markiert, da die Standardbibliothek niemals eine Ausnahme auslöst, wenn sie die nicht definierte Verhaltensbedingung „non-propagate_on_container_swap
non-equal-allocator“ erkennt. - Viele
vector<bool>
-Vorgänge sind jetzt alsnoexcept
gekennzeichnet. - Die Standardbibliothek erzwingt jetzt den Abgleich von
value_type
(im C++17-Modus) mit einem Escapehatch für die Deaktivierung. - Einige Bedingungen wurden korrigiert, bei denen „self-range-insert“ in
basic_string
den Inhalt der Zeichenfolge durcheinandergebracht hat. (Hinweis: „self-range-insert“ in Vektoren ist im Standard immer noch nicht zulässig.) basic_string::shrink_to_fit()
wird nicht länger vompropagate_on_container_swap
der Zuweisung beeinträchtigt.std::decay
verarbeitet jetzt abominable-Funktionstypen (also Funktionstypen mit cv- und/oder ref-Qualifizierer).- include-Direktiven wurden geändert und verwenden jetzt die richtige Groß- und Kleinschreibung und Schrägstriche, was die Portierbarkeit verbessert.
- Die Warnung C4061 „Der Enumerator „enumerator“ im Schalter der Enumeration „enumeration“ wird von keiner Fallbezeichnung explizit behandelt“ wurde korrigiert. Diese Warnung ist standardmäßig deaktiviert und wurde als Ausnahme der allgemeinen Richtlinie der Standardbibliothek für Warnungen korrigiert. (Die Standardbibliothek ist
/W4
-bereinigt, versucht jedoch nicht,/Wall
-bereinigt zu sein. Viele standardmäßig deaktivierte Warnungen sind ungewöhnlich auffällig und sollen nicht regelmäßig verwendet werden.) - Verbesserte
std::list
-Debugüberprüfungen. Listeniteratoren überprüfen jetztoperator->()
, undlist::unique()
markiert Iteratoren jetzt als ungültig. - Die Metaprogrammierung von „uses-allocator“ wurde im
tuple
korrigiert.
Visual Studio 2017 Version 15.5
std::partition
ruft nun in Übereinstimmung mit dem Standard das PrädikatN
Mal anstattN + 1
Mal auf.- Versuche, statische Magic-Befehle in Version 15.3 zu vermeiden, wurden in Version 15.5 repariert.
std::atomic<T>
erfordert nicht mehr, dassT
standardmäßig konstruierbar ist.- Heapalgorithmen, die die logarithmische Zeit nutzen, weisen ein anderes Verhalten auf, wenn das Iteratordebugging aktiviert ist. Es erfolgt keine Assertion der linearen Zeit zur Bestimmung, dass es sich bei der Eingabe tatsächlich um einen Heap handelt.
__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.basic_string::npos
ist nun als Kompilierzeitkonstante verfügbar.std::allocator
verarbeitet nun im C++17-Modus ordnungsgemäß die Speicherbelegung von überausgerichteten Typen, also von Typen, deren Ausrichtung größer alsmax_align_t
ist (sofern keine Deaktivierung durch/Zc:alignedNew-
erfolgt). Vektoren von Objekten mit 16- oder 32-Byte-Ausrichtung werden z.B. nun ordnungsgemäß für SSE- und AVX-Anweisungen ausgerichtet.
Verbesserungen bei der Übereinstimmung mit Standards
- Wir haben <any>, <string_view>,
apply()
undmake_from_tuple()
hinzugefügt. - Es wurden <optional>, <variant>,
shared_ptr::weak_type
, und <cstdalign> hinzugefügt. - C++14
constexpr
wurde inmin(initializer_list)
,max(initializer_list)
undminmax(initializer_list)
undmin_element()
,max_element()
undminmax_element()
hinzugefügt.
Weitere Informationen finden Sie unter Microsoft C/C++-Sprachkonformität.
Visual Studio 2017 Version 15.3
- Es wurden mehrere weitere C++17-Features implementiert. Weitere Informationen finden Sie unter Microsoft C++-Sprachkonformität: Tabelle.
- P0602R0 wurde implementiert: „variant and optional should propagate copy/move triviality“.
- Die Standardbibliothek toleriert jetzt offiziell das Deaktivieren dynamischer RTTI über die Option /GR-.
dynamic_pointer_cast()
undrethrow_if_nested()
erfordern grundsätzlichdynamic_cast
. Daher kennzeichnet die Standardbibliothek sie jetzt unter/GR-
als=delete
. - Auch wenn dynamische RTTI über
/GR-
deaktiviert wurde, ist statische RTTI (in Form vontypeid(SomeType)
) weiterhin verfügbar und unterstützt verschiedene Komponenten der Standardbibliothek. Die Standardbibliothek unterstützt über/D_HAS_STATIC_RTTI=0
jetzt auch die Deaktivierung der statischen RTTI. Durch diese Flag werdenstd::any
, die Memberfunktionentarget()
undtarget_type()
vonstd::function
sowie die Friend-Memberfunktionenget_deleter()
vonstd::shared_ptr
undstd::weak_ptr
deaktiviert. - Die Standardbibliothek verwendet jetzt „C++14
constexpr
“ bedingungslos anstelle von bedingt definierten Makros. - Die Standardbibliothek verwendet jetzt intern Aliasvorlagen.
- Die Standardbibliothek verwendet jetzt intern
nullptr
anstelle vonnullptr_t{}
. (Die interne Nutzung von NULL wird beseitigt. Die interne Nutzung von „0-as-null“ wird nach und nach bereinigt.) - Die Standardbibliothek verwendet jetzt intern
std::move()
anstelle der stilistisch fehlerhaften Verwendung vonstd::forward()
. static_assert(false, "message")
wurde in#error message
geändert. Dies verbessert die Compilerdiagnose, da#error
die Kompilierung sofort beendet.- Die Standardbibliothek markiert Funktionen nicht mehr als
__declspec(dllimport)
. Für moderne Linkertechnologien ist dies nicht mehr erforderlich. - SFINAE wurde in Standardvorlagenargumente extrahiert, wodurch der Code im Vergleich zu Rückgabetypen und Funktionsargumenttypen übersichtlicher wurde.
- <Zufällige> Debugüberprüfungen verwenden jetzt die üblichen Mechanismen der Standardbibliothek anstelle der internen Funktion
_Rng_abort()
, diefputs()
fürstderr
aufgerufen hat. Die Implementierung dieser Funktion wird für Binärkompatibilität beibehalten. Sie wird in der nächsten binärinkompatiblen Version der Standardbibliothek entfernt.
Visual Studio 2017 Version 15.5
- Mehrere Features der Standardbibliothek wurden in Übereinstimmung mit dem C++17-Standard hinzugefügt, als veraltet markiert oder entfernt. Weitere Informationen finden Sie unter C++ Conformance Improvements in Visual Studio (Verbesserungen bei der Übereinstimmung mit C++-Standards in Visual Studio).
- Experimentelle Unterstützung für die folgenden parallelen Algorithmen:
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. Bei der Profilerstellung wurden durch die Parallelisierung von Algorithmen, mit denen Elemente lediglich verschoben oder permutiert werden, keine Vorteile ermittelt:
copy
copy_n
fill
fill_n
move
reverse
reverse_copy
rotate
rotate_copy
swap_ranges
Visual Studio 2017 Version 15.6
<memory_resource>
- Bibliotheksgrundlagen V1
- Löschen der
polymorphic_allocator
-Zuweisung - Verbesserung der Klassenvorlagenargumentableitung
Visual Studio 2017-Version 15.7
- Unterstützung für parallele Algorithmen ist nicht mehr experimentell
- Eine neue Implementierung von
<filesystem>
- Elementare Zeichenfolgenkonvertierungen (partiell)
std::launder()
std::byte
hypot(x,y,z)
- Vermeiden unnötigen Verfalls
- Mathematische spezielle Funktionen
constexpr char_traits
- Herleitungsregelwerk für die Standardbibliothek
Weitere Informationen finden Sie unter Microsoft C/C++-Sprachkonformität.
Korrekturen für Leistung und Durchsatz
- Vorgenommene
basic_string::find(char)
-Überladungen rufentraits::find
nur einmalig auf. Dies wurde zuvor als eine allgemeine Zeichenfolgensuche nach einer Zeichenfolge der Länge 1 implementiert. basic_string::operator==
überprüft nun die Größe der Zeichenfolge, bevor der Inhalt der Zeichenfolge verglichen wird.- Die Kontrollkopplung in
basic_string
, die für den Compileroptimierer schwer zu analysieren war, wurde entfernt. Bei kurzen Zeichenfolgen verursacht der Aufruf vonreserve
auch dann Kosten, wenn keine Arbeit erledigt wird. std::vector
wurde aus Leistungsgründen und zur Sicherstellung der korrekten Funktionsweise überholt. Das Aliasing während des Einfügens bzw. während des Neuerstellens und Einfügens (Emplacement) wird nun korrekt entsprechend des Standards durchgeführt. Die starke Ausnahmegarantie wird nun bereitgestellt, wenn dies laut Standard übermove_if_noexcept()
oder über eine andere Logik erforderlich ist. Beim Einfügen bzw. Neuerstellen und Einfügen werden weniger Elementvorgänge durchgeführt.- Die C++-Standardbibliothek vermeidet nun die Dereferenzierung von Fancy Pointern des Typs NULL.
- Verbesserte
weak_ptr::lock()
-Leistung. - Header der C++-Standardbibliothek vermeiden nun das Einschließen von Deklarationen für unnötige intrinsische Compilerfunktionen, um den Compilerdurchsatz zu erhöhen.
- Die Leistung des Bewegungskonstruktors von
std::string
undstd::wstring
wurde um mehr als das Dreifache verbessert.
Visual Studio 2017 Version 15.3
- Für Interaktionen mit
noexcept
, die ein Einbetten derstd::atomic
-Implementierung in Funktionen verhindert haben, die die strukturierte Ausnahmebehandlung verwenden, wurde eine Problemumgehung eingeführt. - Die interne
_Deallocate()
-Funktion der Standardbibliothek wurde in kleinere Codeabschnitte optimiert, sodass sie jetzt inline an mehr Stellen eingebettet werden kann. std::try_lock()
wurde geändert und verwendet jetzt Paketerweiterung anstelle von Rekursion.- Der Algorithmus von
std::lock()
zum Verhindern von Deadlocks wurde verbessert und verwendet jetztlock()
-Vorgänge, anstatt alletry_lock()
auf allen Sperren zu durchlaufen. - Die Optimierung von benannten Rückgabewerten in
system_category::message()
wurde aktiviert. conjunction
unddisjunction
instanziieren jetztN + 1
-Typen anstatt2N + 2
-Typen.std::function
instanziiert den Mechanismus für die Zuweisungsunterstützung nicht mehr für jedes aufrufbare Objekt mit Typlöschung. Dies erhöht den Durchsatz und reduziert die OBJ-Größe in Programmen, die viele verschiedene Lambdas anstd::function
übergeben.allocator_traits<std::allocator>
enthält manuellestd::allocator
-Inlinevorgänge und verringert die Codegröße in Code, der mitstd::allocator
nur überallocator_traits
interagiert (dies gilt für den Großteil von Codes).- 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. 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>
). - Die Metaprogrammierung für benutzerdefinierte
allocator::reference
-Elemente, die von Zuweisungen nicht angepasst werden dürfen, wurde entfernt. (Durch Zuweisungen können Container originelle Zeiger verwenden, aber keine originellen Verweise.) - Das Compiler-Front-End entpackt jetzt Debugiteratoren in reihenfolgebasierten for-Schleifen und verbessert so die Leistung von Debugbuilds.
- Der interne Reduzierungspfad von
basic_string
fürshrink_to_fit()
undreserve()
befindet sich nicht mehr im Pfad für Neuzuweisungsvorgänge, wodurch der Codeumfang für alle mutierenden Member reduziert wird. - Der interne Erweiterungspfad von
basic_string
befindet sich nicht mehr im Pfad vonshrink_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. - Mutierende Vorgänge von
basic_string
konstruieren jetzt erneut zugewiesene Puffer im bevorzugten Zustand, anstatt lokal die Größe zu ändern. Durch eine Einfügung am Anfang einer Zeichenfolge wird der Inhalt nach der Einfügung jetzt z. B. exakt einmal verschoben. Er wird entweder nach unten oder in den neu zugeordneten Puffer verschoben. Folglich wird er bei der Neuzuordnung nicht mehr zweimal verschoben (zunächst in den neu zugeordneten Puffer und dann nach unten). - Vorgänge, die die C-Standardbibliothek in <string> aufrufen, speichern jetzt die Adresse von
errno
, um wiederholte Interaktionen mit TLS zu entfernen. - Die Implementierung von
is_pointer
wurde vereinfacht. - Die Änderung des funktionsbasierten Ausdrucks „SFINAE“ in
struct
- undvoid_t
-basiert wurde abgeschlossen. - Algorithmen der Standardbibliothek vermeiden jetzt postinkrementelle Iteratoren.
- Warnungen zu Abschneidungen beim Verwenden von 32-Bit-Zuweisungen in 64-Bit-Systemen wurden korrigiert.
- 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.
Visual Studio 2017 Version 15.5
basic_string<char16_t>
interagiert nun mit den gleichen Optimierungen vonmemcmp
undmemcpy
sowie ähnlichen Optimierungen, die vonbasic_string<wchar_t>
verwendet werden.- 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. - Der Mehraufwand für die Überprüfung der Reihenfolge von Eingaben (
includes
,set_difference
,set_symmetric_difference
undset_union
) des Iteratordebuggens wurde durch das Entpacken von Iteratoren vor der Überprüfung der Reihenfolge verringert. std::inplace_merge
überspringt nun Elemente, die sich bereits in der richtigen Position befinden.- Das Erstellen von
std::random_device
erstellt nicht länger einstd::string
-Element bzw. zerstört es auch nicht mehr. - Für
std::equal
undstd::partition
wurde ein Jump Threading-Optimierungsdurchlauf ausgeführt, durch den ein Iteratorvergleich weniger erforderlich ist. - Wenn
std::reverse
Zeiger auf trivial kopierbaresT
übergeben werden, erfolgt die Ausgabe nun an eine handgeschriebene vektorisierte Implementierung. std::fill
,std::equal
undstd::lexicographical_compare
wurden beigebracht, wie die Weiterleitung anmemset
undmemcmp
fürstd::byte
undgsl::byte
(sowie für andere char-ähnliche Enumerationen und Enumerationsklassen) funktioniert. Die Weiterleitung fürstd::copy
erfolgt mithilfe vonis_trivially_copyable
. Daher sind keine Änderungen notwendig.- Die Standardbibliothek enthält keine Destruktoren mehr mit leeren Klammern, deren einziges Verhalten darin bestand, Typen als nicht tribial zerstörbar zu definieren.
Weitere Bibliotheken
Unterstützung für Open-Source-Bibliotheken
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. Weitere Informationen finden Sie unter vcpkg.
C++ REST SDK 2.9.0
Visual Studio 2017 Version 15.5
CPPRestSDK, eine plattformübergreifende Web-API für C++, wurde auf Version 2.9.0 aktualisiert. Weitere Informationen finden Sie im Blogbeitrag CppRestSDK 2.9.0 is available on GitHub.
ATL
Visual Studio 2017 Version 15.5
- Weitere Korrekturen an der Übereinstimmung bei der Suche nach Namen
- Vorhandene Bewegungskonstruktoren und Bewegungszuweisungsoperatoren werden jetzt ordnungsgemäß als nicht auslösend markiert.
- Die gültige Warnung C4640 zur threadsicheren Initialisierung von lokalen statischen Variablen in „atlstr.h“ wird nicht mehr unterdrückt.
- Die threadsichere Initialisierung lokaler statischer Variablen wurde bei Verwendung von ATL zum Erstellen einer DLL im XP-Toolset automatisch deaktiviert. Dies ist nicht mehr der Fall. Wenn Sie keine threadsichere Initialisierung wünschen, können Sie
/Zc:threadSafeInit-
in Ihren Projekteinstellungen hinzufügen.
Visual C++ Runtime
- Neuer Header „cfguard.h“ für Ablaufsteuerungsschutz-Symbole.
Visual 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. Wenn eine Projektmappenkonfiguration zum ersten Mal aktiviert wird, ist sie jetzt schneller, und alle späteren Aktivierungen dieser Projektmappenkonfiguration erfolgen fast unmittelbar.
Visual Studio 2017 Version 15.3
- Verschiedene Projekt- und Code-Assistenten wurden im Signaturdialogstil umgeschrieben.
- Klasse hinzufügen startet den Assistenten zum Hinzufügen von Klassen nun direkt. Alle anderen Elemente, die hier zuvor verfügbar waren, finden Sie nun unter Hinzufügen > Neues Element.
- Win32-Projekte sind nun im Dialogfeld Neues Projekt in der Windows Desktop-Kategorie zu finden.
- Die Windows-Konsolen- und Desktopanwendungsvorlagen erstellen die Projekte nun, ohne einen Assistenten anzuzeigen. 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.
Visual 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. Die folgenden Angaben basieren auf der Visual Studio Chromium-Lösung mit 3.500 Projekten:
Feature | Leistungssteigerung |
---|---|
Umbenennen | 5,3-fach |
Signatur ändern | 4,5-fach |
Alle Verweise suchen | 4,7-fach |
C++ unterstützt jetzt STRG+Klick-GoTo-Definition, was die Navigation mit der Maus zu Definitionen vereinfacht. Die Strukturvisualisierung aus dem Productivity Power Tools-Paket ist nun standardmäßig auch im Produkt enthalten.
IntelliSense
Die neue, auf SQLite basierende Datenbank-Engine wird jetzt standardmäßig verwendet. Mit der neuen Engine werden Datenbankvorgänge wie Zur Definition wechseln und Alle Verweise suchen beschleunigt. Die Dauer der anfänglichen Projektmappenanalyse wird erheblich reduziert. Diese Einstellung befindet sich jetzt unter Extras > Optionen > Text-Editor > C/C++ > Erweitert. (Bisher befand sie sich unter ...C/C++ > Experimentell.)
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.
Wir haben die Fehlerfilterung und Hilfe für IntelliSense-Fehler in der Fehlerliste hinzugefügt. Das Klicken auf die Fehlerspalte ermöglicht jetzt die Filterung. Durch Klicken auf die einzelnen Fehler oder durch Drücken von F1 wird eine Onlinesuche nach der Fehlermeldung gestartet.
Die Möglichkeit zum Filtern von Elementen der Memberliste nach Typ wurde hinzugefügt.
Eine neue experimentelle, vorhersehbare IntelliSense-Funktion, die das kontextbewusste Filtern in der Memberliste bereitstellt, wurde hinzugefügt. Weitere Informationen finden Sie im Blogbeitrag C++ IntelliSense Improvements – Predictive IntelliSense & Filtering (Verbesserungen in C++-IntelliSense: Predictive IntelliSense und Filtern).
Alle Verweise suchen (UMSCHALT+F12) ermöglicht nun eine einfachere Navigation, auch in komplexen Codebasen. 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. Für C++ enthält die neue Benutzeroberfläche Informationen dazu, ob Informationen aus einer Variablen gelesen oder in eine Variable geschrieben werden.
Das Punkt-zu-Pfeil-Feature von IntelliSense wurde von „Experimentell“ in „Erweitert“ verschoben und ist nun standardmäßig aktiviert. Die Editor-Features Erweiterungsbereiche und Erweiterungsrangfolge wurden auch von „Experimentell“ in „Erweitert“ verschoben.
Die experimentellen Refactoringfeatures Signatur ändern und Funktion extrahieren sind nun standardmäßig verfügbar.
Das neue experimentelle Feature „Schnelleres Laden von Projekten“ für C++-Projekte wurde hinzugefügt. Wenn Sie das nächste Mal ein C++-Projekt öffnen, wird es schneller geladen. Anschließende Ladevorgänge erfolgen sogar noch schneller!
Einige dieser Features sind auch in anderen Sprachen gängig, während einige C++-spezifisch sind. Weitere Informationen zu diesen neuen Features finden Sie im Blogbeitrag Announcing Visual Studio "15" Preview 5 (Ankündigung von Visual Studio 2017 Vorschauversion 5).
Visual Studio 2017-Version 15.7
- Unterstützung für ClangFormat wurde hinzugefügt. Weitere Informationen finden Sie im Blogbeitrag ClangFormat Support in Visual Studio 2017 (Unterstützung für ClangFormat in Visual Studio 2017).
Nicht-MSBuild-Projekte mit „Ordner öffnen“
In Visual Studio 2017 wurde das Feature Ordner öffnen eingeführt. 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. Dadurch wird der Einstieg in Visual Studio wesentlich einfacher, selbst wenn Ihr Projekt nicht auf MSBuild basiert. Über Ordner öffnen erhalten Sie Zugriff auf leistungsstarke Funktionen zum Bearbeiten, Erstellen und Debuggen von Code. Diese Funktionen entsprechen den Funktionen, die in Visual Studio bereits für MSBuild-Projekte verfügbar sind. Weitere Informationen finden Sie unter Open Folder projects for C++ (Verwenden von „Ordner öffnen“ mit Projekten in Visual C++).
- Verbesserungen in der Benutzeroberfläche „Ordner öffnen“. Sie können die Oberfläche über diese JSON-Dateien anpassen:
- CppProperties.json zum Anpassen des IntelliSense- und Browsererlebnisses.
- Tasks.json zum Anpassen der Buildschritte.
- Launch.json zum Anpassen des Debugvorgangs.
Visual Studio 2017 Version 15.3
- Die Unterstützung für alternative Compiler und Buildumgebungen wie MinGW und Cygwin wurde verbessert. 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“).
- Unterstützung für das Definieren von globalen und konfigurationsspezifischen Umgebungsvariablen in „CppProperties.json“ und „CMakeSettings.json“ wurde hinzugefügt. Diese Umgebungsvariablen können von in „launch.vs.json“ definierten Debugkonfigurationen und von Aufgaben in „tasks.vs.json“ verwendet werden. Weitere Informationen finden Sie unter Anpassen Ihrer Umgebung mit Visual C++ und „Ordner öffnen“.
- 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.
Unterstützung von CMake über „Ordner öffnen“
Visual Studio 2017 führt die Unterstützung für die Verwendung von CMake-Projekten ohne Konvertierung in MSBuild-Projektdateien (.vcxproj) ein. Weitere Informationen finden Sie unter CMake-Projekte 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.
C++-IntelliSense funktioniert, ohne dass Sie eine „CppProperties.json“-Datei im Stammordner erstellen müssen. Es wurde ein neues Dropdownmenü hinzugefügt, sodass Benutzer*innen einfach zwischen von CMake- und CppProperties.json-Dateien bereitgestellten Konfigurationen wechseln können.
Weitere Konfigurationen werden über eine Datei „CMakeSettings.json“ unterstützt, die sich im gleichen Ordner wie die Datei „CMakeLists.txt“ befindet.
Visual Studio 2017 Version 15.3
- Unterstützung für den Ninja-Generator von CMake wurde hinzugefügt.
Visual Studio 2017 Version 15.4
- Unterstützung für das Importieren von vorhandenen CMake-Caches wurde hinzugefügt.
Visual Studio 2017 Version 15.5
- Unterstützung für CMake 3.11, die Codeanalyse in CMake-Projekten, die Ansicht „Ziele“ im Projektmappen-Explorer, die Optionen zur Cachegenerierung und die Kompilierung von Einzeldateien wurde hinzugefügt. Weitere Informationen finden Sie im Blogbeitrag CMake Support in Visual Studio – Targets View, Single File Compilation, and Cache Generation Settings (CMake-Unterstützung in Visual Studio: Ansicht „Ziele“, Kompilierung von Einzeldateien und Einstellungen für Cachegenerierung) und CMake-Projekte in Visual Studio.
Windows-Desktopentwicklung
Die Installationsoberfläche ermöglicht bei der Installation der ursprünglichen C++-Arbeitsauslastung jetzt eine feinere Abstimmung. Es wurden auswählbare Komponenten hinzugefügt, sodass Sie nur die Tools installieren können, die Sie benötigen. Die angegebenen Installationsgrößen für die im Installationsprogramm aufgeführten Komponenten sind falsch, sodass die Gesamtgröße unterschätzt wird.
Wenn Sie Win32-Projekte erfolgreich in der C++-Desktoparbeitsauslastung erstellen möchten, müssen Sie ein Toolset und ein Windows SDK installieren. Zum Installieren der empfohlenen (ausgewählten) Komponenten benötigen Sie VC++ 2017 c141 Toolset (x86, x64) und Windows 10 SDK (10.0.nnnnn) . Sollten die erforderlichen Tools nicht installiert sein, werden Projekte nicht erfolgreich erstellt. Außerdem reagiert der Assistent nicht mehr.
Visual 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. Diese Workload installiert nur die Tools, die zum Erstellen von C++-Projekten ohne Installation der Visual Studio-IDE erforderlich sind. Die Toolsets v140 und v141 sind beide enthalten. Das v141-Toolset enthält die neuesten Verbesserungen in Version 15.5 von Visual Studio 2017. Weitere Informationen finden Sie unter Visual Studio Build Tools enthalten nun die MSVC-Toolsets VS2017 und VS2015.
Linux-Entwicklung mit C++
Die beliebte Erweiterung Visual C++ für Linux-Entwicklung ist nun Bestandteil von Visual Studio. Diese Installation bietet alles, was Sie zum Entwickeln und Debuggen von C++-Anwendungen in einer Linux-Umgebung benötigen.
Visual Studio 2017 Version 15.2
Verbesserungen für plattformübergreifende gemeinsame Codenutzung und Typvisualisierung wurden vorgenommen. 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).
Visual Studio 2017 Version 15.5
- Der Linux-Workload wurde Unterstützung für rsync als Alternative zu sftp hinzugefügt, um Dateien auf Linux-Remotecomputern zu synchronisieren.
- Unterstützung für Kreuzkompilierung für ARM-Mikrocontroller wurde hinzugefügt. 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. Durch diese Option werden die ARM GCC-Kreuzkompilierungstools und Make Ihrer Installation hinzugefügt. Weitere Informationen finden Sie unter ARM GCC-Kreuzkompilierung in Visual Studio.
- Unterstützung für CMake wurde hinzugefügt. Sie können nun an Ihrer bestehenden CMake-Codebasis arbeiten, ohne sie in ein Visual Studio-Projekt konvertieren zu müssen. Weitere Informationen finden Sie unter Konfigurieren eines Linux CMake-Projekts.
- Unterstützung für das Ausführen von Remotetasks wurde hinzugefügt. Mit dieser Funktion können Sie jeden Befehl auf einem Remotesystem ausführen, das im Verbindungs-Manager von Visual Studio definiert ist. Remotetasks bieten auch die Möglichkeit zum Kopieren von Dateien auf das Remotesystem. Weitere Informationen finden Sie unter Konfigurieren eines Linux CMake-Projekts.
Visual Studio 2017-Version 15.7
- Verschiedene Verbesserungen für Linux-Workload-Szenarios. Weitere Informationen finden Sie unter Linux C++ Workload improvements to the Project System, Linux Console Window, rsync and Attach to Process (Verbesserungen der Linux-C++-Workload für das Projektsystem, die Linux-Konsole, Windows, rsync und „An den Prozess anhängen“).
- IntelliSense für Header in Linux-Remoteverbindungen. Weitere Informationen finden Sie unter IntelliSense for Remote Linux Headers (IntelliSense für Linux-Remoteheaders) und Konfigurieren eines Linux-CMake-Projekts.
Spieleentwicklung mit C++
Verwenden Sie die volle Leistung von C++, um professionelle Spiele zu erstellen, die von DirectX oder Cocos2d unterstützt werden.
Mobile Entwicklung mit C++ für Android und iOS
Sie können nun mithilfe von Visual Studio mobile Apps erstellen und debuggen, die auf Android und iOS ausgerichtet sind.
Universelle Windows-Apps
C++ wird als optionale Komponente für die Arbeitsauslastung der Universellen Windows-App bereitgestellt. Aktuell müssen C++-Projekte manuell aktualisieren werden. Sie können ein Projekt für die Universelle Windows-Plattform mit dem Ziel v140 in Visual Studio 2017 öffnen. Wenn Visual Studio 2015 nicht installiert ist, müssen Sie das v141-Plattformtoolset jedoch auf den Projekteigenschaftenseiten auswählen.
Neue Optionen für C++ auf der universellen Windows-Plattform (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. Oder für die Bereitstellung über Ihre vorhandenen Kanäle mittels Querladen. 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. Weitere Informationen finden Sie unter Desktop Bridge.
Visual 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. Sie ist unter Datei > Neu > Projekt > Installiert > Visual C++ > Universelle Windows-Plattform verfügbar. Weitere Informationen finden Sie unter Packen einer App mit 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. Mit ihr können Sie Windows-Runtime-APIs mit jedem standardkonformen C++-Compiler nutzen und erstellen. C++/WinRT wurde dafür konzipiert, C++-Entwicklern erstklassigen Zugriff auf die moderne Windows-API zur Verfügung zu stellen. Weitere Informationen finden Sie unter C++/WinRT.
Ab Build 17025 der Windows SDK Insider Preview ist C++/WinRT im Windows SDK enthalten. Weitere Informationen finden Sie unter C++/WinRT ist jetzt im Windows SDK enthalten.
Das Clang/C2-Plattformtoolset
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. Es umfasst außerdem eine Reihe wichtiger Fehlerbehebungen, sowohl im Front-End als auch im Back-End des Compilers.
C++-Codeanalyse
Visual Studio liefert nun die C++-Kernprüfungen zum Erzwingen der C++-Kernrichtlinien. Aktivieren Sie die Prüfungen auf den Projekteigenschaftenseiten in den Erweiterungen für die Codeanalyse. Die Erweiterungen werden dann beim Ausführen der Codeanalyse eingeschlossen. Weitere Informationen finden Sie unter Verwenden der C++-Core-Richtlinienprüfungen.
Visual Studio 2017 Version 15.3
- Es wurde Unterstützung für Regeln in Bezug auf die Ressourcenverwaltung hinzugefügt.
Visual Studio 2017 Version 15.5
Neue C++ Core Guidelines überprüfen intelligente Zeiger auf Richtigkeit, prüfen die richtige Verwendung globaler Initialisierer und kennzeichnen die Verwendungen von Konstrukten wie
goto
sowie fehlerhafte Typumwandlungen.Einige Warnnummern, die in Version 15.3 vorhanden waren, sind in Version 15.5 nicht mehr verfügbar. Diese Warnungen wurden durch genauere Überprüfungen ersetzt.
Visual Studio 2017 Version 15.6
- Unterstützung für die Analyse von Einzeldateien hinzugefügt und Verbesserungen der Laufzeitleistung der Analyse vorgenommen. Weitere Informationen finden Sie unter C++ Static Analysis Improvements for Visual Studio 2017 15.6 Preview 2 (Verbesserungen an der statischen C++-Analyse für Visual Studio 2017-Version 15.6, Vorschauversion 2)
Visual Studio 2017-Version 15.7
- Unterstützung für
/analyze:ruleset
hinzugefügt. So können Sie angeben, welche Codeanalyseregeln ausgeführt werden sollen. - Unterstützung für weitere C++ Core Guidelines wurde hinzugefügt. Weitere Informationen finden Sie unter Verwenden der C++-Core-Richtlinienprüfungen.
Komponententests in Visual Studio 2017
Visual Studio 2017 Version 15.5
Google Test Adapter und Boost.Test-Adapter sind jetzt als Komponenten der Workload Desktopentwicklung mit C++ verfügbar. Sie sind in den Test-Explorer integriert. 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. Weitere Informationen finden unter Erstellen von Komponententests für C/C++.
Visual Studio 2017 Version 15.6
- Unterstützung für dynamische
Boost.Test
-Bibliotheksunterstützung hinzugefügt. - In der IDE steht jetzt eine
Boost.Test
-Elementvorlage zur Verfügung.
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).
Visual Studio 2017-Version 15.7
Unterstützung für CodeLens für C++-Komponententestprojekte hinzugefügt. Weitere Informationen finden Sie unter Announcing CodeLens for C++ Unit Testing (Ankündigung: CodeLens für C++-Unittests).
Visual Studio-Grafikdiagnose
Visual Studio-Grafikdiagnosetools: Mit diesen Tools können Sie Rendering- und Leistungsprobleme bei Direct3D-Apps erfassen und analysieren. 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.
Eingabe 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. Dieses Feature wird nun in den Tools unterstützt. 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.
Suchen und Filtern in der Objekttabelle: Diese Option stellt eine schnelle und einfache Möglichkeit dar, die gesuchten Ressourcen zu finden.
Ressourcenverlauf: In dieser neue Ansicht wurde der gesamte Änderungsverlaufs einer Ressource und deren Verwendung während des Renderns eines aufgezeichneten Frames optimiert. Um den Verlauf für jede Ressource aufzurufen, klicken Sie auf das Uhrsymbol neben jeden Ressourcenlink.
Dadurch wird das Toolfenster Ressourcenverlauf angezeigt, in dem sich der Änderungsverlauf der Ressource befindet.
Sie können Frames bei aktivierter Erfassung der vollständigen Aufrufliste erfassen. Dadurch können Sie im Handumdrehen den Kontext der einzelnen Änderungsereignisse ableiten und innerhalb Ihres Visual Studio-Projekts untersuchen. Die Option zur Erfassung der vollständigen Liste wird in Visual Studio im Dialogfeld Tools > Optionen unter Grafikdiagnose festgelegt.
API-Statistiken: Eine allgemeine Zusammenfassung der API-Verwendung in Ihrem 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. Dieses Fenster steht über Ansicht > API-Statistiken in der Visual Studio-Grafikanalyse zur Verfügung.
Speicherstatistiken: Diese Option stellt dar, wie viel Arbeitsspeicher der Treiber für die Ressourcen reserviert, die Sie im Frame erstellen. Dieses Fenster steht über Ansicht > Speicherstatistiken in der Visual Studio-Grafikanalyse zur Verfügung. 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.
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. Klicken Sie zum Öffnen des Fensters in der Visual Studio-Grafikanalyse auf Ansicht > Frame-Überprüfung. Klicken Sie dann auf Überprüfung ausführen, um die Analyse zu starten. Je nach Komplexität des Frames kann dieser Vorgang mehrere Minuten dauern.
Frame-Analyse für D3D12: Verwenden Sie die Frame-Analyse zum Analysieren der Leistung von Zeichenvorgängen mit „Was-wäre-wenn“-Experimenten. Wechseln Sie zur Registerkarte „Frame-Analyse“, und führen Sie Analysen aus, um den Bericht anzuzeigen.
Verbesserungen der GPU-Auslastung: Offene Ablaufverfolgungen können über den Visual Studio-Profiler für GPU-Auslastung mit dem Tool „GPU-Ansicht“ oder Windows Performance Analyzer (WPA) abgerufen werden, um eine detailliertere Analyse durchzuführen. 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.
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. Über ein Kontrollkästchen in Visual Studio wird festgelegt, ob die Synchronisierung aktiviert ist oder nicht.