Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Visual Studio 2019 brengt veel updates en oplossingen voor de Microsoft C++-omgeving. We hebben veel bugs en problemen in de compiler en hulpprogramma's opgelost. Veel van deze problemen zijn door klanten ingediend via het rapport een probleem en bieden een suggestieopties onder Feedback verzenden. Bedankt voor het melden van fouten.
Ga naar Wat is er nieuw in Visual Studio 2019 voor meer informatie over wat er nieuw is in Visual Studio. Zie Nieuw voor C++ in Visual Studio 2017voor informatie over wat er nieuw is voor C++ in Visual Studio 2017. Zie Visual C++ Wat is er nieuw voor C++ tot en met 2015 in Visual Studio 2015 en eerdere versies.
Wat is er nieuw voor C++ in Visual Studio versie 16.11
Zie Wat is er nieuw in Visual Studio 2019 versie 16.11 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.11.
De compiler ondersteunt nu de
/std:c++20compilermodus. Voorheen waren C++20-functies alleen beschikbaar in de/std:c++latestmodus in Visual Studio 2019. Functies die oorspronkelijk de vereiste modus hebben,/std:c++latestwerken nu in/std:c++20de modus of hoger in de nieuwste versies van Visual Studio.LLVM-hulpprogramma's die zijn geleverd met Visual Studio, zijn bijgewerkt naar LLVM 12. Zie de releaseopmerkingen voor LLVM voor meer informatie.
Clang-cl-ondersteuning is bijgewerkt naar LLVM 12.
Wat is er nieuw voor C++ in Visual Studio versie 16.10
Zie Wat is er nieuw in Visual Studio 2019 versie 16.10 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.10.
Alle C++20-functies zijn nu beschikbaar onder
/std:c++latest. Hoewel de implementatie van de C++20-standaarden (zoals momenteel gepubliceerd door ISO) is voltooid, worden sommige belangrijke C++20-bibliotheekfuncties naar verwachting gewijzigd door aanstaande defectrapporten (ISO C++20 bugfixes) die deze op een incompatibele ABI-manier kunnen wijzigen. Zie Microsoft/STL-probleem #1814 voor meer informatie.- C++20 onmiddellijke functies en constinit-ondersteuning toegevoegd in 16.10
- De laatste stukken van
<chrono>: nieuwe klokken, schrikkel seconden, tijdzones en parseren - Implementatie van
<format>voor tekstopmaak
/openmp:llvmis nu beschikbaar op x86 en ARM64, naast x64Inclusief mappen kunnen nu worden aangewezen als extern met aangepaste compilatiewaarschuwingsniveaus en instellingen voor codeanalyse.
/await:strictDe optie toegevoegd om C++20-stijl coroutines in te schakelen in eerdere taalmodi.De visualisatie van het foutopsporingsprogramma van
std::coroutine_handle<T>nu geeft de oorspronkelijke coroutinefunctienaam en handtekening en het huidige onderbrekingspunt weer.Er is ondersteuning toegevoegd voor CMakePresets.
U moet nu de vingerafdruk van de hostsleutel accepteren of weigeren die door de server wordt weergegeven bij het toevoegen van een nieuwe externe verbinding in Visual Studio.
Er is een
/externalschakeloptie toegevoegd aan MSVC voor het opgeven van headers die moeten worden behandeld als extern voor waarschuwingsdoeleinden.
Wat is er nieuw voor C++ in Visual Studio versie 16.9
Zie Wat is er nieuw in Visual Studio 2019 versie 16.9 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.9.
-
Onze ondersteuning voor adressopschoning in Windows is niet meer experimenteel en heeft algemene beschikbaarheid bereikt.
Uitgebreide
RtlAllocateHeapondersteuning, er is een compatibiliteitsprobleem opgelost metRtlCreateHeapenRtlAllocateHeapinterceptors bij het maken van uitvoerbare geheugengroepen.Er is ondersteuning toegevoegd voor de verouderde
GlobalAllocenLocalAllocfamilie van geheugenfuncties. U kunt deze interceptors inschakelen door de omgevingsvlagASAN_OPTIONS=windows_hook_legacy_allocators=truein te stellen.Bijgewerkte foutberichten voor interleaving en onderschepping van schaduwgeheugen om problemen en oplossingen expliciet te maken.
De IDE-integratie kan nu de volledige verzameling uitzonderingen verwerken die ASan kan rapporteren.
De compiler en linker stellen voor om foutopsporingsgegevens te verzenden als ze detecteren dat u met ASan bouwt, maar geen foutopsporingsgegevens verzendt.
U kunt nu de LLVM-versie van de OpenMP-runtime richten met de nieuwe CL-switch
/openmp:llvm. Hiermee wordt ondersteuning toegevoegd voor delastprivatecomponent over#pragma ompsecties en niet-ondertekende indexvariabelen in parallelleforlussen. De/openmp:llvmswitch is momenteel alleen beschikbaar voor het amd64-doel en is nog steeds experimenteel.Visual Studio CMake-projecten hebben nu eersteklas ondersteuning voor externe Windows-ontwikkeling. Dit omvat het configureren van een CMake-project voor het doel van Windows ARM64, het implementeren van het project op een externe Windows-computer en het opsporen van fouten in het project op een externe Windows-computer vanuit Visual Studio.
De versie van Ninja die wordt geleverd met Visual Studio in Windows, is bijgewerkt naar versie 1.10. Zie de opmerkingen bij de release van Ninja 1.10 voor meer informatie over wat er is inbegrepen.
De versie van CMake die wordt geleverd met Visual Studio is bijgewerkt naar versie 3.19. Zie de releaseopmerkingen voor CMake 3.19 voor meer informatie over wat er is opgenomen.
Gemarkeerd veel vergrendelings-/bewakerstypen in de STL als
nodiscard.IntelliSense:
Verbeterde stabiliteit en functionaliteit van het leveren van geïmporteerde modules en headereenheden in IntelliSense.
Go-to-definition toegevoegd voor het importeren van modules, indexeringsondersteuning voor
export {...}en nauwkeurigere moduleverwijzingen voor modules met dezelfde naam.Verbeterde taalconformantie van C++ IntelliSense door ondersteuning toe te voegen voor het kopiëren van initialisatie van tijdelijke verwijzingen in direct-initialisatie
__builtin_memcpyen__builtin_memmovehet oplossen van inconsistenties tussenconstexprfuncties enconstevalfuncties, tijdelijke levensduurs in constante expressies en vergelijkbare typen en referentiebindingen.Voltooiing toegevoegd voor make_unique, make_shared, emplace en emplace_back die voltooiing biedt op basis van de opgegeven typeparameter.
MSVC bepaalt nu de juiste adress sanitizer-runtimes die vereist zijn voor uw binaire bestanden. Uw Visual Studio-project krijgt automatisch de nieuwe wijzigingen. Wanneer u adres opschoning op de opdrachtregel gebruikt, hoeft u nu alleen de compiler door te geven
/fsanitize=address.Verbindingsbeheer van Visual Studio ondersteunt nu persoonlijke sleutels met behulp van het algoritme voor openbare ECDSA-sleutels.
De versies van LLVM en Clang bijgewerkt die in ons installatieprogramma naar v11 zijn verzonden. Lees de releaseopmerkingen voor LLVM en Clang voor meer informatie.
Visual Studio gebruikt nu CMake-variabelen uit hulpprogrammaketenbestanden om IntelliSense te configureren. Dit biedt een betere ervaring voor ingesloten en Android-ontwikkeling.
Implementatie van het voorstel More Constexpr Containers, waarmee destructors en nieuwe expressies kunnen worden uitgevoerd
constexpr. Dit maakt de weg voor nutsbedrijven alsconstexprstd::vectorenstd::string.Uitgebreide ondersteuning voor C++20-modules IntelliSense, waaronder Go To Definition, Go To Module en voltooiing van leden.
Afgekorte functiesjablonen worden nu ondersteund in de MSVC-compiler.
Wat is er nieuw voor C++ in Visual Studio versie 16.8
Zie Wat is er nieuw in Visual Studio 2019 versie 16.8 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.8.
C++20 Coroutines worden nu ondersteund onder
/std:c++latest(of/std:c++20vanaf Visual Studio 2019 versie 16.11) en de<coroutine>header.IntelliSense biedt nu ondersteuning voor C++20
<concepts>en<ranges>headers en het wijzigen en bladeren naar conceptdefinities.Onze STL biedt nu ondersteuning voor het merendeel van de C++20-bereiken.
Voorwaardelijke triviale speciale lidfuncties worden nu ondersteund in MSVC.
C11 en C17 worden nu ondersteund onder de
/std:c11en/std:c17switches.Aanvullende STL-verbeteringen omvatten volledige ondersteuning voor
std::atomic_ref,std::midpointenstd::lerp,std::execution::unseqoptimalisaties voorstd::reverse_copyen meer.Bijgewerkte versie van CMake geleverd met Visual Studio naar CMake 3.18.
Onze hulpprogramma's voor codeanalyse bieden nu ondersteuning voor de SARIF 2.1-standaard: de standaardindeling voor statische analyselogboeken.
Ontbrekende buildhulpprogramma's in Linux-projecten geven nu een waarschuwing op de werkbalk en een duidelijke beschrijving van de ontbrekende hulpprogramma's in de foutenlijst.
U kunt nu rechtstreeks vanuit Visual Studio fouten opsporen in Linux-kerndumps op een extern Linux-systeem of WSL.
Voor het genereren van C++ Doxygen-opmerkingen hebben we extra opties toegevoegd voor opmerkingenstijl (
/*!en//!).Aanvullende vcpkg-aankondigingen.
Compilerondersteuning voor lambdas in niet-geëvalueerde contexten.
/DEBUG:FULLkoppelingsprestaties verbeterd door het maken van PDB met meerdere threads. Verschillende grote toepassingen en AAA-games zien tussen 2 en 4 keer sneller koppelen.Het Visual Studio-foutopsporingsprogramma biedt nu ondersteuning voor
char8_t.Ondersteuning voor ARM64-projecten met behulp van clang-cl.
Wat is er nieuw voor C++ in Visual Studio versie 16.7
Zie Wat is er nieuw in Visual Studio 2019 versie 16.7 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.7.
Onze externe C++ ondersteuning biedt nu ondersteuning voor een breder scala aan Linux-distributies en -shells, waaronder sh, csh, bash, tsch, ksh, zsh en dash. U kunt de keuze van een shell voor een externe verbinding overschrijven door de nieuwe eigenschap 'shell' te wijzigen via ConnectionManager.exe. Deze ondersteuning is getest met zowel OP MSBuild gebaseerde Linux-projecten als CMake-projecten die gericht zijn op een extern Linux-systeem of WSL.
U kunt nu Ninja (een buildsysteem dat incrementele builds zeer snel evalueert) gebruiken om incrementele buildtijden voor OP MSBuild gebaseerde Linux-projecten te verbeteren. U kunt zich voor deze functie aanmelden door incrementele build in te stellen op "With Ninja" op de pagina Algemene eigenschappen. Ninja (ninja-build) moet worden geïnstalleerd op uw externe Linux-systeem of WSL.
Er zijn nieuwe C++20 Standard Library-functies geïmplementeerd. Raadpleeg het STL-wijzigingslogboek op GitHub voor een gedetailleerde lijst.
U kunt nu standaard externe SSH-verbindingen bewerken en instellen in Verbindingsbeheer. Dit betekent dat u een bestaande externe verbinding kunt bewerken (bijvoorbeeld als het IP-adres is gewijzigd) en standaardverbindingen kunt instellen die moeten worden gebruikt in CMakeSettings.json en launch.vs.json. Met externe SSH-verbindingen kunt u C++-projecten bouwen en fouten opsporen op een extern Linux-systeem rechtstreeks vanuit Visual Studio.
Verbeterde IntelliSense-ondersteuning voor Clang in Windows (clang-cl) in Visual Studio. Het clang include-pad bevat nu de clang-bibliotheken, we hebben de golvende in-editorweergave verbeterd bij het gebruik van de std-bibliotheek en we hebben ondersteuning toegevoegd voor C++2a in de clang-modus.
U kunt nu codefouten onderstrepen en meer voorgestelde snelle oplossingen in C++-projecten bekijken. Schakel deze functie in onder Extra > Opties > Teksteditor > C/C++ > Experimenteel. Stel Experimentele code linter uitschakelen in op false. Meer informatie over de C++-teamblog.
We hebben vier nieuwe codeanalyseregels toegevoegd om extra veiligheidsfuncties op te nemen in C++: C26817, C26818, C26819 en C26820.
We hebben eersteklas ondersteuning toegevoegd voor het opsporen van fouten in CMake-projecten op externe systemen met gdbserver.
Vind eenvoudig geheugenbeschadigingsfouten met een experimentele implementatie van AddressSanitizer voor C++ in Visual Studio, nu beschikbaar voor x64-systeemeigen projecten. We ondersteunen nu ook het gebruik van foutopsporingsruntimes (
/MTd,/MDd,/LDd).IntelliSense biedt nu basisondersteuning voor concepten, aangewezen initialisatiefuncties en verschillende andere C++20-functies.
.ixxen.cppmbestanden worden nu herkend als C++ en worden als zodanig behandeld door de syntaxismarkering en IntelliSense.
Wat is er nieuw voor C++ in Visual Studio versie 16.6
Zie Wat is er nieuw in Visual Studio 2019 versie 16.6 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.6.
Verbeterde generatie van Doxygen/XML-opmerkingen: Genereer automatisch Doxygen- of XML-documentcommentaar-stubs door functies te typen
///of/**hierboven. Deze worden nu ook weergegeven in knopinfo voor snelle informatie.Ninja-ondersteuning voor CMake voor Linux/WSL: Gebruik Ninja als de onderliggende generator bij het bouwen van CMake-projecten op WSL of een extern systeem. Ninja is nu de standaardgenerator bij het toevoegen van een nieuwe Linux- of WSL-configuratie.
Fouten opsporen in sjablonen voor externe CMake-foutopsporing: we hebben de sjablonen voor foutopsporing van CMake-projecten op een extern Linux-systeem of WSL met gdb vereenvoudigd.
Initiële ondersteuning voor C++20-concepten: IntelliSense herkent nu C++20-concepten en stelt deze voor in de ledenlijst.
Wat is er nieuw voor C++ in Visual Studio versie 16.5
Zie Wat is er nieuw in Visual Studio 2019 versie 16.5 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.5.
Ondersteuning voor intelliCode-teamvoltooiingsmodel en lidvariabelen: C++ ontwikkelaars kunnen nu IntelliCode-modellen trainen op hun eigen codebasis. We noemen dit een model voor teamvoltooiing, omdat u profiteert van de procedures van uw team. Daarnaast hebben we IntelliCode-suggesties voor lidvariabelen verbeterd.
IntelliSense-verbeteringen:
- IntelliSense geeft nu meer leesbare typenamen weer wanneer u met de standaardbibliotheek te maken hebt.
- We hebben de mogelijkheid toegevoegd om te schakelen of Enter, Spatie en Tab werken als doorvoertekens en om te schakelen of Tab wordt gebruikt om fragment in te voegen. Zoek deze instellingen onder Extra > Opties > Teksteditor > C/C++ > Geavanceerd > IntelliSense.
Verbindingsbeheer via de opdrachtregel: U kunt nu communiceren met uw opgeslagen externe verbindingen via de opdrachtregel. Het is handig voor taken zoals het inrichten van een nieuwe ontwikkelcomputer of het instellen van Visual Studio in continue integratie.
Fouten opsporen en implementeren voor WSL: Gebruik de systeemeigen ondersteuning van Visual Studio voor WSL om uw buildsysteem te scheiden van uw externe implementatiesysteem. U kunt nu systeemeigen bouwen op WSL en de buildartefacten implementeren op een tweede extern systeem voor foutopsporing. Deze werkstroom wordt ondersteund door zowel CMake-projecten als OP MSBuild gebaseerde Linux-projecten.
Ondersteuning voor fips 140-2-nalevingsmodus: Visual Studio ondersteunt nu de FIPS 140-2-nalevingsmodus bij het ontwikkelen van C++-toepassingen die gericht zijn op een extern Linux-systeem.
Taalservices voor CMake Language-bestanden en betere CMake-projectmanipulatie:
De bronbestandskopie voor CMake-projecten gericht op een extern Linux-systeem is geoptimaliseerd. Visual Studio bewaart nu een 'vingerafdrukbestand' van de laatste set bronnen die extern zijn gekopieerd en optimaliseert het gedrag op basis van het aantal gewijzigde bestanden.
Codenavigatiefuncties zoals Go To Definition en Find All References worden nu ondersteund voor functies, variabelen en doelen in CMake-scriptbestanden.
Voeg bronbestanden en -doelen toe, verwijder en wijzig de naam ervan in uw CMake-projecten vanuit de IDE zonder uw CMake-scripts handmatig te bewerken. Wanneer u bestanden toevoegt of verwijdert met Solution Explorer, wordt uw CMake-project automatisch bewerkt in Visual Studio. U kunt ook de doelen van het project toevoegen, verwijderen en de naam ervan wijzigen in de weergave Doelen van Solution Explorer.
Verbeteringen in Linux-projecten: Visual Studio Linux-projecten hebben nu nauwkeurigere IntelliSense en bieden u de mogelijkheid om synchronisatie van externe headers op projectbasis te beheren.
Wat is er nieuw voor C++ in Visual Studio versie 16.4
Zie Wat is er nieuw in Visual Studio 2019 versie 16.4 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.4.
Codeanalyse biedt nu systeemeigen ondersteuning
Clang-Tidyvoor zowel MSBuild- als CMake-projecten, ongeacht of u een Clang- of MSVC-toolset gebruikt. clang-tidy controles kunnen worden uitgevoerd als onderdeel van achtergrondcodeanalyse, worden weergegeven als waarschuwingen in editor (golven) en worden weergegeven in de lijst met fouten.Visual Studio CMake-projecten hebben nu Overzichtspagina's waarmee u aan de slag kunt met platformoverschrijdende ontwikkeling. Deze pagina's zijn dynamisch en helpen u verbinding te maken met een Linux-systeem en een Linux- of WSL-configuratie toe te voegen aan uw CMake-project.
In het vervolgkeuzemenu voor CMake-projecten worden nu uw meest recent gebruikte doelen weergegeven en kunnen worden gefilterd.
C++/CLI ondersteunt nu interop met .NET Core 3.1 en hoger in Windows.
U kunt ASan nu inschakelen voor projecten die zijn gecompileerd met MSVC in Windows voor runtime-instrumentatie van C++-code die helpt bij het detecteren van geheugenfouten.
Updates voor de C++-standaardbibliotheek van MSVC:
- C++17: Algemene precisie geïmplementeerd
to_chars(), waarbij P0067R5 Elementaire tekenreeksconversies (charconv) worden voltooid. Hiermee wordt de implementatie van alle bibliotheekfuncties in de C++17 Standard voltooid. - C++20: De concepten P1754R1 Naam van concepten wijzigen in standard_case geïmplementeerd. Als u deze functies wilt opnemen, gebruikt u de
/std:c++latestcompileroptie (of/std:c++20begint u in Visual Studio 2019 versie 16.11). De optie kan ook worden ingesteld op de eigenschappenpagina van het project Configuration Properties > C/C++ > Language met behulp van de eigenschap C++ Language Standard .
- C++17: Algemene precisie geïmplementeerd
Er is nu een nieuwe verzameling hulpprogramma's met de naam C++ Build Insights beschikbaar. Zie het C++-teamblog voor meer informatie over de aankondiging.
Wat is er nieuw voor C++ in Visual Studio versie 16.3
Zie Wat is er nieuw in Visual Studio 2019 versie 16.3 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.3.
C++ ontwikkelaars kunnen nu regelopmerkingen in-/uitschakelen met de sneltoets Ctrl+K, Ctrl+/.
IntelliSense-ledenlijsten worden nu gefilterd op basis van typekwalificaties, bijvoorbeeld om
const std::vectormethoden zoalspush_back.We hebben deze C++20 Standard Library-functies toegevoegd (beschikbaar onder
/std:c++latestof/std:c++20vanaf Visual Studio 2019 versie 16.11):Nieuwe C++ Kernrichtlijncontroles, met inbegrip van de nieuwe regelset Enum-regels, en aanvullende
const,enumen typeregels.Met een nieuw semantisch kleurenschema kunnen gebruikers hun code in één oogopslag beter begrijpen. Het venster aanroepstack kan worden geconfigureerd om sjabloonargumenten te verbergen en C++ IntelliCode is on-by-default.
Configureer foutopsporingsdoelen en aangepaste taken met omgevingsvariabelen met behulp van CMakeSettings.json of CppProperties.json of de nieuwe 'env'-tag voor afzonderlijke doelen en taken in launch.vs.json en tasks.vs.json.
Gebruikers kunnen nu een snelle actie gebruiken voor ontbrekende vcpkg-pakketten om automatisch een console te openen en te installeren op de standaard-vcpkg-installatie.
De externe headerkopie die wordt uitgevoerd door Linux-projecten (CMake en MSBuild) is geoptimaliseerd en wordt nu parallel uitgevoerd.
De systeemeigen ondersteuning van Visual Studio voor WSL ondersteunt nu parallelle builds voor OP MSBuild gebaseerde Linux-projecten.
Gebruikers kunnen nu een lijst met lokale build-uitvoer opgeven om te implementeren op een extern systeem met Linux Makefile-projecten.
Beschrijvingen van instellingen in de CMake Settings Editor bevatten nu meer context en koppelingen naar nuttige documentatie.
Het C++-basismodel voor IntelliCode is nu standaard ingeschakeld. U kunt deze instelling wijzigen door naar Extra>Opties>intelliCode te gaan.
Wat is er nieuw voor C++ in Visual Studio versie 16.2
Zie Wat is er nieuw in Visual Studio 2019 versie 16.2 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.2.
Voor lokale CMake-projecten die zijn geconfigureerd met Clang, voert codeanalyse nu clang-tidy-controles uit, die worden weergegeven als onderdeel van de analyse van achtergrondcode als in-editor waarschuwingen (golven) en in de foutenlijst.
<charconv>De header bijgewerkt voor de P0067R5 basisreeksconversies van C++17:- Extra drijvendekommagemplementaties
to_chars()voorchars_format::fixedenchars_format::scientificprecisie (chars_format::general precisionis het enige onderdeel dat nog niet is geïmplementeerd) -
chars_format::fixedGeoptimaliseerd kortst
- Extra drijvendekommagemplementaties
Deze C++20 Standard Library-functies toegevoegd:
- Beschikbaar onder
/std:c++latest(of/std:c++20vanaf Visual Studio 2019 versie 16.11): - Beschikbaar onder
/std:c++17en/std:c++latest(of/std:c++20vanaf Visual Studio 2019 versie 16.11):-
P0600R1:
[[nodiscard]]in de bibliotheek
-
P0600R1:
- Voorwaardelijke beschikbaarheid:
- Beschikbaar onder
Windows SDK is geen afhankelijkheid meer voor de onderdelen CMake voor Windows en CMake voor Linux.
Verbeteringen aan de C++-linker om de buildtijden van iteratie aanzienlijk te verbeteren voor de grootste invoer.
/DEBUG:FASTen/INCREMENTALtijden zijn gemiddeld twee keer zo snel en/DEBUG:FULLis nu drie tot zes keer sneller.
Wat is er nieuw voor C++ in Visual Studio versie 16.1
Zie Wat is er nieuw in Visual Studio 2019 versie 16.1 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.1.
C++ compiler
Deze C++20-functies zijn geïmplementeerd in de C++-compiler, beschikbaar onder
/std:c++latest(of/std:c++20vanaf Visual Studio 2019 versie 16.11):- Verbeterde mogelijkheid om functiesjablonen te vinden via argumentafhankelijke zoekfunctie voor functie-aanroepexpressies met expliciete sjabloonargumenten (P0846R0).
- Aangewezen initialisatie (P0329R4), waarmee specifieke leden kunnen worden geselecteerd in een statistische initialisatie, bijvoorbeeld met behulp van de
Type t { .member = expr }syntaxis.
Lambda-ondersteuning is gereviseerd en heeft betrekking op een groot aantal langlopende bugs. Deze wijziging is standaard ingeschakeld wanneer u deze gebruikt
/std:c++20of/std:c++latest. In/std:c++17de taalmodus en onder de standaardmodus (/std:c++14) kan de nieuwe parser worden ingeschakeld met behulp van/Zc:lambdaVisual Studio 2019 versie 16.9 of hoger (eerder beschikbaar vanaf/experimental:newLambdaProcessorVisual Studio 2019 versie 16.3), bijvoorbeeld/std:c++17 /Zc:lambda.
Verbeteringen in de standaardbibliotheek van C++
- Deze C++20-functies zijn toegevoegd aan onze implementatie van de C++ Standaardbibliotheek, beschikbaar onder
/std:c++latest:-
starts_withenends_withvoorbasic_stringenbasic_string_view. -
containsvoor associatieve containers. -
remove,remove_ifenuniquevoorlistenforward_listnu terugsize_type. -
shift_leftenshift_righttoegevoegd aan<algorithm>.
-
C++ IDE
IntelliCode voor C++
IntelliCode wordt nu geleverd als een optioneel onderdeel in de desktopontwikkeling met C++ -workload. Zie Verbeterde C++ IntelliCode nu wordt geleverd met Visual Studio 2019 voor meer informatie.
IntelliCode maakt gebruik van een eigen uitgebreide training en uw codecontext om te zetten wat u waarschijnlijk boven aan uw voltooiingslijst zult gebruiken. Het kan vaak voorkomen dat u omlaag door de lijst hoeft te schuiven. Voor C++biedt IntelliCode de meeste hulp bij het gebruik van populaire bibliotheken, zoals de standaardbibliotheek.
De nieuwe IntelliCode-functies (aangepaste modellen, C++-ondersteuning en EditorConfig-deductie) zijn standaard uitgeschakeld. Als u deze wilt inschakelen, gaat u naar Extra > Opties > IntelliCode > Algemeen. Deze versie van IntelliCode heeft de nauwkeurigheid verbeterd en biedt ondersteuning voor gratis functies. Zie AI-Assisted suggesties voor het voltooien van code via IntelliCode naar C++ voor meer informatie.
Verbeteringen aan snelle informatie
- De knopinfo Snelle info respecteert nu de semantische kleur van uw editor. Het bevat ook een nieuwe zoekkoppeling waarmee onlinedocumentatie wordt gezocht naar informatie over de aanwijscodeconstructie. Met de koppeling van Snelle informatie voor rode golvende code wordt de fout online gezocht. Op die manier hoeft u het bericht niet opnieuw te typen in uw browser. Zie Verbeteringen aan snelle informatie in Visual Studio 2019: Colorization and Search Online voor meer informatie.
Algemene verbeteringen
De sjabloonbalk kan de vervolgkeuzelijst vullen op basis van instantiaties van die sjabloon in uw codebasis.
Gloeilampen voor ontbrekende
#includeinstructies die vcpkg kunnen installeren en automatisch aanvullen van beschikbare pakketten voor de CMake-richtlijnfind_package.De pagina Algemene eigenschappen voor C++-projecten is herzien. Sommige opties worden nu weergegeven onder een nieuwe pagina Geavanceerd . De pagina Geavanceerd bevat ook nieuwe eigenschappen voor de architectuur van uw favoriete toolset, foutopsporingsbibliotheken, de secundaire versie van de MSVC-toolset en unity-builds (jumbo).
Ondersteuning voor CMake
We hebben de CMake-versie bijgewerkt die wordt geleverd met Visual Studio naar 3.14. Met deze versie wordt ingebouwde ondersteuning toegevoegd voor MSBuild-generatoren die gericht zijn op Visual Studio 2019-projecten en op bestanden gebaseerde IDE-integratie-API's.
We hebben verbeteringen toegevoegd aan de CMake-instellingeneditor, waaronder ondersteuning voor Windows-subsysteem voor Linux (WSL) en configuraties van bestaande caches, wijzigingen in de standaardbuild en installatiehoofdmaps en ondersteuning voor omgevingsvariabelen in Linux CMake-configuraties.
Voltooiingen en snelle informatie voor ingebouwde CMake-opdrachten, -variabelen en -eigenschappen maken het eenvoudiger om uw
CMakeLists.txtbestanden te bewerken.We hebben ondersteuning geïntegreerd voor het bewerken, bouwen en opsporen van fouten in CMake-projecten met Clang/LLVM. Zie Clang/LLVM-ondersteuning in Visual Studio voor meer informatie.
Linux en het Windows-subsysteem voor Linux
We ondersteunen nu AddressSanitizer (ASan) in Linux- en CMake-projecten op meerdere platforms. Zie AddressSanitizer (ASan) voor de Linux-workload in Visual Studio 2019 voor meer informatie.
We hebben Visual Studio-ondersteuning geïntegreerd voor het gebruik van C++ met het Windows-subsysteem voor Linux (WSL). U kunt nu uw lokale Windows-subsysteem voor Linux -installatie (WSL) gebruiken met C++ systeemeigen in Visual Studio zonder extra configuratie of een SSH-verbinding. Zie C++ met Visual Studio 2019 en Windows Subsystem voor Linux (WSL) voor meer informatie.
Codeanalyse
- Er zijn nieuwe snelle oplossingen toegevoegd voor niet-geïnitialiseerde variabelecontroles. Codeanalysewaarschuwingen C6001: het gebruik van niet-geïnitialiseerd geheugen
<variable>en C26494 VAR_USE_BEFORE_INIT zijn beschikbaar in het gloeilampmenu op relevante regels. Ze worden standaard ingeschakeld in de standaardregelset van Microsoft En C++ Core Check Type regelsets. Zie Voor meer informatie snelle oplossingen voor nieuwe codeanalyses voor niet-geïnitialiseerd geheugen (C6001) en voordat init-waarschuwingen (C26494) worden gebruikt.
Externe builds
Gebruikers kunnen nu externe buildmachines scheiden van externe foutopsporingsmachines bij het richten van Linux in zowel MSBuild- als CMake-projecten.
De verbeterde logboekregistratie voor externe verbindingen maakt het eenvoudiger om problemen in platformoverschrijdende ontwikkeling vast te stellen.
Wat is er nieuw voor C++ in Visual Studio versie 16.0
Zie Wat is er nieuw in Visual Studio 2019 versie 16.0 voor een overzicht van nieuwe functies en bugfixes in Visual Studio versie 16.0.
C++ compiler
Verbeterde ondersteuning voor C++17-functies en correcties, plus experimentele ondersteuning voor C++20-functies, zoals modules en coroutines. Zie C++ Conformance Improvements in Visual Studio 2019 voor gedetailleerde informatie.
De
/std:c++latestoptie bevat nu C++20-functies die niet noodzakelijkerwijs zijn voltooid, inclusief de eerste ondersteuning voor de C++20-operator<=>('spaceship') voor vergelijking in drie richtingen.De C++-compilerswitch
/Gmis nu afgeschaft. Overweeg om de/Gmswitch in uw buildscripts uit te schakelen als deze expliciet is gedefinieerd. U kunt de afschaffingswaarschuwing echter ook veilig negeren,/Gmomdat deze niet wordt behandeld als een fout bij het gebruik van 'Waarschuwingen als fouten behandelen' (/WX).Aangezien MSVC begint met het implementeren van functies uit het C++20-standaardconcept onder de
/std:c++latestvlag,/std:c++latestis deze nu niet compatibel met/clr(alle smaken),/ZWen/Gm. Gebruik of/std:c++14modi in Visual Studio 2019/std:c++17bij het compileren met/clr,/ZWof/Gm(maar zie het vorige opsommingsteken).Vooraf gecompileerde headers worden niet meer standaard gegenereerd voor C++-console- en desktop-apps.
Codegen, beveiliging, diagnostische gegevens en versiebeheer
Verbeterde analyse voor /Qspectre het bieden van risicobeperkingshulp voor Spectre Variant 1 (CVE-2017-5753). Zie Spectre Mitigations in MSVC voor meer informatie.
Verbeteringen in de standaardbibliotheek van C++
Implementatie van aanvullende C++17- en C++20-bibliotheekfuncties en correcties. Zie C++ Conformance Improvements in Visual Studio 2019 voor gedetailleerde informatie.
Clang-Format is toegepast op de standaard C++-bibliotheekheaders voor een betere leesbaarheid.
Omdat Visual Studio nu Just My Code voor C++ondersteunt, hoeft de standaardbibliotheek geen aangepaste machines
std::functionmeer te bieden enstd::visithetzelfde effect te bereiken. Het verwijderen van die machines heeft grotendeels geen zichtbare effecten van de gebruiker. Een uitzondering hierop is dat de compiler geen diagnostische gegevens meer produceert die duiden op problemen op regel 15732480 of 16707566 van<type_traits>of<variant>.
Prestatie-/doorvoerverbeteringen in de compiler en standaardbibliotheek
Bouw doorvoerverbeteringen, waaronder de manier waarop de linker bestands-I/O verwerkt en de koppelingstijd in het PDB-type samenvoegen en maken.
Er is basisondersteuning toegevoegd voor OpenMP SIMD-vectorisatie. U kunt deze inschakelen met behulp van de nieuwe compilerswitch
/openmp:experimental. Met deze optie kunnen lussen met#pragma omp simdaantekeningen worden gevectoriseerd. De vectorisatie wordt niet gegarandeerd en lussen met aantekeningen, maar niet gevectoriseerd, krijgen een waarschuwing gerapporteerd. Er worden geen SIMD-componenten ondersteund; ze worden genegeerd en er wordt een waarschuwing gerapporteerd.Er is een nieuwe inlining-opdrachtregelschakelaar
/Ob3toegevoegd, een agressievere versie van/Ob2./O2(optimaliseer het binaire bestand voor snelheid) impliceert/Ob2nog steeds standaard. Als u merkt dat de compiler niet agressief genoeg inline is, kunt u overwegen om door te geven/O2 -Ob3.We hebben ondersteuning toegevoegd voor intrinsieke functies van SvML (Short Vector Math Library). Met deze functies worden de 128-bits, 256-bits of 512-bits vectorequivalenten berekend. We hebben ze toegevoegd ter ondersteuning van handvectorisatie van lussen met aanroepen naar wiskundige bibliotheekfuncties en bepaalde andere bewerkingen, zoals gehele getallen. Zie de Intel Intrinsieke Handleiding voor definities van de ondersteunde functies.
Nieuwe en verbeterde optimalisaties:
Constant vouwen en rekenkundige vereenvoudigingen voor expressies met behulp van SIMD vector intrinsieken, voor zowel float- als gehele getallen.
Een krachtigere analyse voor het extraheren van informatie uit de controlestroom (if/else/switch-instructies) om vertakkingen altijd waar of onwaar te verwijderen.
Verbeterde uitschrijving van memset voor het gebruik van SSE2-vectorinstructies.
Verbeterde verwijdering van nutteloze struct-/klassekopieën, met name voor C++-programma's die een waarde doorgeven.
Verbeterde optimalisatie van code met behulp
memmovevan, zoalsstd::copyofstd::vectorenstd::stringconstructie.
Geoptimaliseerd voor het fysieke ontwerp van de standaardbibliotheek om te voorkomen dat onderdelen van de standaardbibliotheek niet rechtstreeks worden opgenomen. Door deze wijziging wordt de buildtijd van een leeg bestand met slechts
<vector>de helft ingekort. Als gevolg hiervan moet u mogelijk instructies toevoegen#includevoor headers die eerder indirect waren opgenomen. Code die nu wordt gebruiktstd::out_of_range, moet bijvoorbeeld mogelijk worden toegevoegd#include <stdexcept>. Code die gebruikmaakt van een streaminvoegingsoperator moet nu mogelijk worden toegevoegd#include <ostream>. Het voordeel is dat alleen vertaaleenheden die daadwerkelijk worden gebruikt<stdexcept>of<ostream>onderdelen de doorvoerkosten betalen om ze te compileren.if constexpris op meer plaatsen in de standaardbibliotheek toegepast voor verbeterde doorvoer en verminderde codegrootte in kopieerbewerkingen, in permutaties zoals omgekeerd en draaien, en in de bibliotheek met parallelle algoritmen.De standaardbibliotheek wordt nu intern gebruikt
if constexprom compileertijden te verminderen, zelfs in de C++14-modus.De runtime voor dynamische koppelingsdetectie voor de bibliotheek met parallelle algoritmen gebruikt geen volledige pagina meer om de functieaanwijzermatrix op te slaan. Het markeren van dit geheugen als alleen-lezen wordt beschouwd als niet langer relevant voor beveiligingsdoeleinden.
De
std::threadconstructor wacht niet meer totdat de thread is gestart en voegt niet langer zoveel lagen functie-aanroepen in tussen de onderliggende C-bibliotheek_beginthreadexen het opgegeven aanroepbare object. Plaats eerderstd::threadzes functies tussen_beginthreadexen het opgegeven aanroepbare object. Dit aantal is teruggebracht tot slechts drie, waarvan er slechts twee zijnstd::invoke. Deze wijziging lost ook een verborgen timingfout op, waarbij eenstd::threadconstructor niet meer reageert als de systeemklok op het exacte moment waarop destd::threadklok werd gemaakt, werd gewijzigd.Er is een prestatieregressie opgelost die
std::hashwe bij de implementatiestd::hash<std::filesystem::path>hebben geïntroduceerd.De standaardbibliotheek maakt nu gebruik van destructors in plaats van catchblokken op verschillende plaatsen om juistheid te bereiken. Deze wijziging resulteert in een betere interactie tussen foutopsporingsprogramma's: uitzonderingen die u door de standaardbibliotheek op de betrokken locaties gooit, worden nu weergegeven als worden gegenereerd vanaf hun oorspronkelijke gooisite, in plaats van onze nieuwe implementatie. Niet alle standaard bibliotheekvangblokken zijn geëlimineerd. We verwachten dat het aantal vangstblokken in latere versies van MSVC wordt verminderd.
Suboptimale codegen veroorzaakt
std::bitsetdoor een voorwaardelijke throw in eennoexceptfunctie is opgelost door het weggooiende pad te factoreren.De
std::listenstd::unordered_*familie gebruiken intern niet-foutopsporings iterators op meer plaatsen.Er zijn verschillende
std::listleden gewijzigd om lijstknooppunten waar mogelijk opnieuw te gebruiken in plaats van ze te verplaatsen en opnieuw te plaatsen. Als u bijvoorbeeld allist<int>een grootte van 3 hebt, overschrijft een aanroep omassign(4, 1729)nu deintwaarden in de eerste drie lijstknooppunten te overschrijven en wijst u één nieuw lijstknooppunt toe met de waarde 1729.Alle standaardbibliotheekoproepen
erase(begin(), end())zijn gewijzigd inclear().std::vectorinitialiseert en wist nu elementen in bepaalde gevallen efficiënter.Verbeteringen om
std::variantdeze beter te optimaliseren, wat resulteert in beter gegenereerde code. Code-inlining is nu veel beter metstd::visit.
C++ IDE
Ondersteuning voor Live Share C++
Live Share ondersteunt nu C++, waardoor ontwikkelaars die Visual Studio of Visual Studio Code gebruiken, in realtime kunnen samenwerken. Zie Aankondiging van Live Share voor C++: Real-Time Delen en samenwerken voor meer informatie
Sjabloon IntelliSense
De sjabloonbalk maakt nu gebruik van de gebruikersinterface voor het weergeven van vensters in plaats van een modaal venster, ondersteunt geneste sjablonen en vult alle standaardargumenten vooraf in het venster Peek. Zie Sjabloon IntelliSense-verbeteringen voor Visual Studio 2019 Preview 2 voor meer informatie. Met de vervolgkeuzelijst Meest recent gebruikt in de sjabloonbalk kunt u snel schakelen tussen eerdere sets met voorbeeldargumenten.
Nieuwe startvensterervaring
Wanneer u de IDE start, wordt er een nieuw startvenster weergegeven. Het bevat opties voor het openen van recente projecten, het klonen van code uit broncodebeheer, het openen van lokale code als een oplossing of een map, of het maken van een nieuw project. Het dialoogvenster Nieuw project is ook gereviseerd in een zoek-eerste, filterbare ervaring.
Nieuwe namen voor sommige projectsjablonen
We hebben verschillende projectsjabloonnamen en -beschrijvingen aangepast aan het bijgewerkte dialoogvenster Nieuw project.
Diverse productiviteitsverbeteringen
Visual Studio 2019 bevat de volgende functies waarmee u eenvoudiger en intuïtiever kunt coderen:
- Snelle oplossingen voor:
- Ontbrekende toevoegen
#include -
NULLAannullptr - Ontbrekende puntkomma toevoegen
- Ontbrekende naamruimte of bereik oplossen
- Ongeldige indirection operanden (
*aan&en&aan*) vervangen
- Ontbrekende toevoegen
- Snelle informatie voor een blok door de muisaanwijzer op de accolade sluiten te bewegen
- Koptekst/codebestand bekijken
- Ga naar Definitie bij
#includehet openen van het bestand
Zie C++ Productiviteitsverbeteringen in Visual Studio 2019 Preview 2 voor meer informatie.
Ondersteuning voor CMake
Ondersteuning voor CMake 3.14
Visual Studio kan nu bestaande CMake-caches openen die zijn gegenereerd door externe hulpprogramma's, zoals CMakeGUI, aangepaste meta-buildsystemen of scripts bouwen die cmake.exe zichzelf aanroepen.
Verbeterde IntelliSense-prestaties.
Een nieuwe instellingeneditor biedt een alternatief voor het handmatig bewerken van het CMakeSettings.json-bestand en biedt enige pariteit met CMakeGUI.
Visual Studio helpt bij het opstarten van uw C++-ontwikkeling met CMake in Linux door te detecteren of u een compatibele versie van CMake op uw Linux-computer hebt. Als dat niet zo is, kunt u deze installeren.
Incompatibele instellingen in CMakeSettings, zoals niet-overeenkomende architecturen of incompatibele CMake-generatorinstellingen, worden golvende lijnen weergegeven in de JSON-editor en fouten in de foutenlijst.
De vcpkg-hulpprogrammaketen wordt automatisch gedetecteerd en ingeschakeld voor CMake-projecten die eenmaal
vcpkg integrate installzijn geopend in de IDE. Dit gedrag kan worden uitgeschakeld door een leeg toolchainbestand op te geven in CMakeSettings.CMake-projecten schakelen nu standaard Just My Code-foutopsporing in.
Statische analysewaarschuwingen worden nu op de achtergrond verwerkt en weergegeven in de editor voor CMake-projecten.
Duidelijkere build en configureer 'begin' en 'end'-berichten voor CMake-projecten en ondersteuning voor de gebruikersinterface voor de voortgang van de build van Visual Studio. Daarnaast is er nu een CMake-uitbreidingsinstelling in Extra > opties om het detailniveau van CMake-build- en configuratieberichten in het uitvoervenster aan te passen.
De
cmakeToolchaininstelling wordt nu ondersteund in CMakeSettings.json om hulpprogrammaketens op te geven zonder de CMake-opdrachtregel handmatig te wijzigen.Een nieuwe sneltoets voor het menu Alles samenstellenCtrl+Shift+B.
Integratie van IncrediBuild
IncrediBuild is opgenomen als een optioneel onderdeel in de desktopontwikkeling met C++ -workload. De IncrediBuild Build Monitor is volledig geïntegreerd in de Visual Studio IDE. Zie Visualize your build with IncrediBuild's Build Monitor and Visual Studio 2019(Visual Studio 2019) voor meer informatie.
Fouten opsporen
Voor C++-toepassingen die worden uitgevoerd in Windows, laden PDB-bestanden nu in een afzonderlijk 64-bits proces. Met deze wijziging wordt een reeks crashes opgelost die worden veroorzaakt door het foutopsporingsprogramma dat onvoldoende geheugen heeft. Bijvoorbeeld bij het opsporen van fouten in toepassingen die een groot aantal modules en PDB-bestanden bevatten.
Zoeken is ingeschakeld in de vensters Watch, Autos en Locals .
Windows-desktopontwikkeling met C++
Deze C++ ATL/MFC-wizards zijn niet meer beschikbaar:
- Wizard ATL COM+ 1.0-onderdeel
- Wizard ATL Active Server Pages-onderdeel
- Wizard ATL OLE DB-provider
- Wizard ATL-eigenschappenpagina
- ATL OLE DB Consumer Wizard
- MFC ODBC-consument
- MFC-klasse van ActiveX-besturingselement
- MFC-klasse van Type Lib.
Voorbeeldcode voor deze technologieën wordt gearchiveerd in Microsoft Learn en de VCSamples GitHub-opslagplaats.
De Windows 8.1 Software Development Kit (SDK) is niet meer beschikbaar in het Installatieprogramma van Visual Studio. U wordt aangeraden uw C++-projecten te upgraden naar de nieuwste Windows SDK. Als u een harde afhankelijkheid hebt op 8.1, kunt u deze downloaden uit het Windows SDK-archief.
Windows XP-targeting is niet meer beschikbaar voor de nieuwste C++-toolset. XP gericht op MSVC-compiler op VS 2017-niveau wordt nog steeds ondersteund en kan worden geïnstalleerd via afzonderlijke onderdelen.
In onze documentatie wordt het gebruik van samenvoegmodules voor de implementatie van Visual C++ Runtime actief afgeraden. We nemen de extra stap om onze MSM's als afgeschaft te markeren. Overweeg om uw centrale VCRuntime-implementatie van MSM's te migreren naar het herdistribueerbare pakket.
Mobiele ontwikkeling met C++ (Android en iOS)
De C++ Android-ervaring is nu standaard ingesteld op Android SDK 25 en Android NDK 16b.
Platformhulpprogramma'set voor Clang/C2
Het experimentele Clang/C2-onderdeel is verwijderd. Gebruik de MSVC-toolset voor volledige C++-standaarden die voldoen aan /permissive- en /std:c++17, of de Clang/LLVM-hulpprogrammaketen voor Windows.
Codeanalyse
Codeanalyse wordt nu automatisch op de achtergrond uitgevoerd. Waarschuwingen worden weergegeven als groene golvende in-editor terwijl u typt. Zie Codeanalyse in editor in Visual Studio 2019 Preview 2 voor meer informatie.
Nieuwe experimentele gelijktijdigheidscontroleregels voor bekende standaardbibliotheektypen uit de
<mutex>header. Zie Concurrency Code Analysis in Visual Studio 2019 voor meer informatie.Een bijgewerkte gedeeltelijke implementatie van de levensduurprofielcontrole, waarmee zwevende aanwijzers en verwijzingen worden gedetecteerd. Zie Levensduurprofielupdate in Visual Studio 2019 Preview 2 voor meer informatie.
Meer coroutine-gerelateerde controles, waaronder C26138, C26810, C26811 en de experimentele regel C26800. Zie New Code Analysis Checks in Visual Studio 2019: use-after-move en coroutine voor meer informatie.
Het testen van modules
De beheerde C++ testprojectsjabloon is niet meer beschikbaar. U kunt het beheerde C++-testframework blijven gebruiken in uw bestaande projecten. Voor nieuwe eenheidstests kunt u een van de systeemeigen testframeworks gebruiken waarvoor Visual Studio sjablonen (MSTest, Google Test) of de sjabloon Managed C# Test Project biedt.