Delen via


Nieuw voor C++ in Visual Studio 2019

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++20 compilermodus. Voorheen waren C++20-functies alleen beschikbaar in de /std:c++latest modus in Visual Studio 2019. Functies die oorspronkelijk de vereiste modus hebben, /std:c++latest werken nu in /std:c++20 de 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:llvm is nu beschikbaar op x86 en ARM64, naast x64

  • Inclusief mappen kunnen nu worden aangewezen als extern met aangepaste compilatiewaarschuwingsniveaus en instellingen voor codeanalyse.

  • /await:strict De 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 /external schakeloptie 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.

  • Adres opschoning:

    • Onze ondersteuning voor adressopschoning in Windows is niet meer experimenteel en heeft algemene beschikbaarheid bereikt.

    • Uitgebreide RtlAllocateHeap ondersteuning, er is een compatibiliteitsprobleem opgelost met RtlCreateHeap en RtlAllocateHeap interceptors bij het maken van uitvoerbare geheugengroepen.

    • Er is ondersteuning toegevoegd voor de verouderde GlobalAlloc en LocalAlloc familie van geheugenfuncties. U kunt deze interceptors inschakelen door de omgevingsvlag ASAN_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 de lastprivate component over #pragma omp secties en niet-ondertekende indexvariabelen in parallelle for lussen. De /openmp:llvm switch 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:

  • 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 als constexprstd::vector en std::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++20 vanaf 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:c11 en /std:c17 switches.

  • Aanvullende STL-verbeteringen omvatten volledige ondersteuning voorstd::atomic_ref,std::midpoint enstd::lerp, std::execution::unseqoptimalisaties voor std::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:FULL koppelingsprestaties 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.

  • Ondersteuning voor Intel AMX intrinsieken .

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.

  • .ixx en .cppm bestanden 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-Tidy voor 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++latest compileroptie (of /std:c++20 begint 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 .
  • 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::vector methoden zoals push_back.

  • We hebben deze C++20 Standard Library-functies toegevoegd (beschikbaar onder /std:c++latestof /std:c++20 vanaf Visual Studio 2019 versie 16.11):

    • P0487R1: Herstellen operator>>(basic_istream&, CharT*)
    • P0616R0: In gebruiken move()<numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: C++-extensies voor concepten
    • P0898R3: Standaardbibliotheekconcepten
    • P0919R3: Heterogene zoekopdracht voor niet-geordende containers
  • 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() voor chars_format::fixed en chars_format::scientific precisie (chars_format::general precision is het enige onderdeel dat nog niet is geïmplementeerd)
    • chars_format::fixed Geoptimaliseerd kortst
  • Deze C++20 Standard Library-functies toegevoegd:

    • Beschikbaar onder /std:c++latest (of /std:c++20 vanaf Visual Studio 2019 versie 16.11):
      • P0020R6: atomic<floating-point>
      • P0463R1: opsomming endian
      • P0482R6: char8_t type voor UTF-8 tekens en tekenreeksen
      • P0653R2: to_address() voor het converteren van een aanwijzer naar een onbewerkte aanwijzer
    • Beschikbaar onder /std:c++17 en /std:c++latest (of /std:c++20 vanaf Visual Studio 2019 versie 16.11):
      • P0600R1: [[nodiscard]] in de bibliotheek
    • Voorwaardelijke beschikbaarheid:
      • P0754R2: <version> koptekst
      • P0771R1: std::function de verplaatsingsconstructor moet zijn noexcept
  • 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:FAST en /INCREMENTAL tijden zijn gemiddeld twee keer zo snel en /DEBUG:FULL is 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++20 vanaf 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++20 of /std:c++latest. In /std:c++17 de taalmodus en onder de standaardmodus (/std:c++14 ) kan de nieuwe parser worden ingeschakeld met behulp van /Zc:lambda Visual Studio 2019 versie 16.9 of hoger (eerder beschikbaar vanaf /experimental:newLambdaProcessor Visual 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_with en ends_with voor basic_string en basic_string_view.
    • contains voor associatieve containers.
    • remove, remove_ifen unique voor list en forward_list nu terug size_type.
    • shift_left en shift_right toegevoegd 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 #include instructies die vcpkg kunnen installeren en automatisch aanvullen van beschikbare pakketten voor de CMake-richtlijn find_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.txt bestanden 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

Codeanalyse

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++latest optie 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 /Gm is nu afgeschaft. Overweeg om de /Gm switch 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++latest vlag, /std:c++latest is deze nu niet compatibel met /clr (alle smaken), /ZWen /Gm. Gebruik of /std:c++14 modi in Visual Studio 2019 /std:c++17 bij 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::function meer te bieden en std::visit hetzelfde 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 simd aantekeningen 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 /Ob2 nog 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, zoals std::copy of std::vector en std::string constructie.

  • 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 #include voor headers die eerder indirect waren opgenomen. Code die nu wordt gebruikt std::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 constexpr is 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 constexpr om 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::thread constructor wacht niet meer totdat de thread is gestart en voegt niet langer zoveel lagen functie-aanroepen in tussen de onderliggende C-bibliotheek _beginthreadex en het opgegeven aanroepbare object. Plaats eerder std::thread zes functies tussen _beginthreadex en het opgegeven aanroepbare object. Dit aantal is teruggebracht tot slechts drie, waarvan er slechts twee zijn std::invoke. Deze wijziging lost ook een verborgen timingfout op, waarbij een std::thread constructor niet meer reageert als de systeemklok op het exacte moment waarop de std::thread klok werd gemaakt, werd gewijzigd.

  • Er is een prestatieregressie opgelost die std::hash we bij de implementatie std::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::bitset door een voorwaardelijke throw in een noexcept functie is opgelost door het weggooiende pad te factoreren.

  • De std::list en std::unordered_* familie gebruiken intern niet-foutopsporings iterators op meer plaatsen.

  • Er zijn verschillende std::list leden gewijzigd om lijstknooppunten waar mogelijk opnieuw te gebruiken in plaats van ze te verplaatsen en opnieuw te plaatsen. Als u bijvoorbeeld al list<int> een grootte van 3 hebt, overschrijft een aanroep om assign(4, 1729) nu de int waarden 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 in clear().

  • std::vector initialiseert en wist nu elementen in bepaalde gevallen efficiënter.

  • Verbeteringen om std::variant deze beter te optimaliseren, wat resulteert in beter gegenereerde code. Code-inlining is nu veel beter met std::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
    • NULL Aan nullptr
    • Ontbrekende puntkomma toevoegen
    • Ontbrekende naamruimte of bereik oplossen
    • Ongeldige indirection operanden (* aan & en & aan *) vervangen
  • Snelle informatie voor een blok door de muisaanwijzer op de accolade sluiten te bewegen
  • Koptekst/codebestand bekijken
  • Ga naar Definitie bij #include het 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 install zijn 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 cmakeToolchain instelling 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

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.