Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Visual Studio 2019 innehåller många uppdateringar och korrigeringar i Microsoft C++-miljön. Vi har åtgärdat många buggar och problem i kompilatorn och verktygen. Många av dessa problem har skickats in av kunder via alternativet Rapportera ett problem och Ange ett förslag under Skicka feedback. Tack för att du rapporterade buggar!
Mer information om nyheter i hela Visual Studio finns i Nyheter i Visual Studio 2019. Information om vad som är nytt för C++ i Visual Studio 2017 finns i Nyheter för C++ i Visual Studio 2017. Information om vad som är nytt för C++ i Visual Studio 2015 och tidigare versioner finns i Visual C++ Nyheter 2003 till och med 2015.
Nyheter för C++ i Visual Studio version 16.11
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.11 finns i Nyheter i Visual Studio 2019 version 16.11.
Kompilatorn stöder
/std:c++20nu kompilatorläget. Tidigare var C++20-funktioner endast tillgängliga i/std:c++latestläge i Visual Studio 2019. Funktioner som ursprungligen krävde/std:c++latestläge fungerar nu i/std:c++20läge eller senare i de senaste versionerna av Visual Studio.LLVM-verktyg som levereras med Visual Studio har uppgraderats till LLVM 12. Mer information finns i viktig information om LLVM.
Clang-cl-stödet uppdaterades till LLVM 12.
Nyheter för C++ i Visual Studio version 16.10
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.10 finns i Nyheter i Visual Studio 2019 version 16.10.
Alla C++20-funktioner är nu tillgängliga under
/std:c++latest. Även om MSVC:s implementering av C++20-standarderna (som för närvarande publiceras av ISO) är funktionsklar, förväntas vissa viktiga C++20-biblioteksfunktioner ändras genom kommande felrapporter (ISO C++20-felkorrigeringar) som kan ändra dem på ett ABI-inkompatibelt sätt. Mer information finns i Microsoft/STL Issue #1814 .- C++20 omedelbara funktioner och constinit-stöd tillagt i 16.10
- De sista delarna i
<chrono>: nya klockor, skottsekunder, tidszoner och parsning - Implementering av
<format>textformatering
/openmp:llvmär nu tillgängligt på x86 och ARM64, förutom x64Inkludera kataloger kan nu betecknas som externa med anpassade varningsnivåer för kompilering och kodanalysinställningar.
Alternativet har lagts
/await:stricttill för att aktivera coroutines i C++20-format i tidigare språklägen.Visualiseringen av felsökningsprogrammet
std::coroutine_handle<T>visar nu det ursprungliga coroutine-funktionsnamnet och signaturen och den aktuella pauspunkten.Stöd har lagts till för CMakePresets.
Du måste nu acceptera eller neka fingeravtrycket för värdnyckeln som visas av servern när du lägger till en ny fjärranslutning i Visual Studio.
Lade till en
/externalväxel till MSVC för att ange rubriker som ska behandlas som externa i varningssyfte.
Nyheter för C++ i Visual Studio version 16.9
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.9 finns i Nyheter i Visual Studio 2019 version 16.9.
-
Vårt stöd för adressspridare i Windows är ur experimentellt läge och har nått allmän tillgänglighet.
Utökat
RtlAllocateHeapstöd, åtgärdat ett kompatibilitetsproblem medRtlCreateHeapochRtlAllocateHeapinterceptorer när du skapar körbara minnespooler.Stöd har lagts till för äldre
GlobalAllocochLocalAllocfamilj av minnesfunktioner. Du kan aktivera dessa interceptorer genom att ange miljöflagganASAN_OPTIONS=windows_hook_legacy_allocators=true.Uppdaterade felmeddelanden för interfoliering av skuggminne och avlyssningsfel för att göra problem och lösningar explicita.
IDE-integreringen kan nu hantera den fullständiga samlingen undantag som ASan kan rapportera.
Kompilatorn och länkaren föreslår att felsökningsinformation genereras om de upptäcker att du skapar med ASan men inte genererar felsökningsinformation.
Nu kan du rikta in dig på LLVM-versionen av OpenMP-körningen med den nya CL-växeln
/openmp:llvm. Detta lägger till stöd förlastprivate-satsen för#pragma ompavsnitt och osignerade indexvariabler i parallellaforloopar. Växeln/openmp:llvmär för närvarande endast tillgänglig för amd64-målet och är fortfarande experimentell.Visual Studio CMake-projekt har nu förstklassigt stöd för fjärrutveckling av Windows. Detta omfattar att konfigurera ett CMake-projekt för att rikta in sig på Windows ARM64, distribuera projektet till en fjärransluten Windows-dator och felsöka projektet på en fjärransluten Windows-dator från Visual Studio.
Den version av Ninja som levereras med Visual Studio i Windows har uppdaterats till version 1.10. Mer information om vad som ingår finns i Viktig information om Ninja 1.10.
Versionen av CMake som levereras med Visual Studio har uppdaterats till version 3.19. Mer information om vad som ingår finns i viktig information om CMake 3.19.
IntelliSense:
Förbättrade stabiliteten och funktionerna för att tillhandahålla importerade moduler och huvudenheter i IntelliSense.
Go-to-definition har lagts till för modulimporter, indexeringsstöd för
export {...}och mer exakt modulreferens för moduler med samma namn.Förbättrade språkefterlevnaden för C++ IntelliSense genom att lägga till stöd för kopieringsinitiering av temporär i referensdirigeringsinitiering
__builtin_memcpyoch__builtin_memmove, Åtgärda inkonsekvenser mellanconstexprochconstevalfunktioner, Livstidsutsträckta temporaries i konstanta uttryck och Liknande typer och referensbindning.Slutförande har lagts till för make_unique, make_shared, emplace och emplace_back som ger slutförande baserat på den angivna typparametern.
MSVC fastställer nu rätt adressrengöringskörningar som krävs för binärfilerna. Visual Studio-projektet får automatiskt de nya ändringarna. När du använder adressspridare på kommandoraden behöver du nu bara skicka
/fsanitize=addresstill kompilatorn.Nu stöder Anslutningshanteraren för Visual Studio privata nycklar med ecdsa-algoritmen för offentlig nyckel.
Uppdaterade versionerna av LLVM och Clang som levererades i vårt installationsprogram till v11. Läs viktig information för LLVM och Clang för mer information.
Visual Studio använder nu CMake-variabler från verktygsringsfiler för att konfigurera IntelliSense. Detta ger en bättre upplevelse för inbäddad utveckling och Android-utveckling.
Implementering av förslaget More Constexpr Containers, som gör att destructors och nya uttryck kan vara
constexpr. Detta banar väg för verktyg somconstexprstd::vectorochstd::string.Utökat stöd för C++20-moduler IntelliSense, inklusive Go To Definition, Go To Module och medlemsavslut.
Förkortade funktionsmallar stöds nu i MSVC-kompilatorn.
Nyheter för C++ i Visual Studio version 16.8
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.8 finns i Nyheter i Visual Studio 2019 version 16.8.
C++20 Coroutines stöds nu under
/std:c++latest(eller/std:c++20från och med Visual Studio 2019 version 16.11) och<coroutine>rubriken.IntelliSense har nu stöd för C++20
<concepts>och<ranges>rubriker samt byter namn på och bläddrar efter konceptdefinitioner.Vår STL har nu stöd för majoriteten av C++20 Ranges.
Villkorligt triviala specialmedlemsfunktioner stöds nu i MSVC.
C11 och C17 stöds nu under switcharna
/std:c11och/std:c17.Ytterligare STL-förbättringar omfattar fullt stöd för
std::atomic_ref,std::midpointochstd::lerpstd::execution::unseq, optimeringar förstd::reverse_copyoch mycket mer.Uppgraderad version av CMake som levereras med Visual Studio till CMake 3.18.
Våra kodanalysverktyg har nu stöd för SARIF 2.1-standarden: branschstandardformatet för statisk analyslogg.
Byggverktyg som saknas i Linux-projekt kommer nu att utfärda en varning i verktygsfältet och en tydlig beskrivning av de verktyg som saknas i fellistan.
Du kan nu felsöka Linux Core-dumpar på ett fjärranslutet Linux-system eller WSL direkt från Visual Studio.
För generering av C++ Doxygen-kommentarer har vi lagt till ytterligare alternativ för kommentarsformat (
/*!och//!).Ytterligare vcpkg-meddelanden.
Kompilatorstöd för lambdas i ovärdeerade kontexter.
/DEBUG:FULLlänkprestanda har förbättrats genom att PDB skapas med flera trådar. Flera stora program och AAA-spel ser mellan 2 och 4 gånger snabbare länkning.Visual Studio-felsökningsprogrammet har nu stöd för
char8_t.Stöd för ARM64-projekt med hjälp av clang-cl.
Intel AMX-inbyggt stöd.
Nyheter för C++ i Visual Studio version 16.7
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.7 finns i Nyheter i Visual Studio 2019 version 16.7.
Vårt fjärrstöd för C++ stöder nu ett bredare utbud av Linux-distributioner och -gränssnitt, inklusive sh, csh, bash, tsch, ksh, zsh och dash. Du kan åsidosätta valet av ett gränssnitt för en fjärranslutning genom att ändra den nya "shell"-egenskapen via ConnectionManager.exe. Det här stödet har testats med både MSBuild-baserade Linux-projekt och CMake-projekt som riktar sig mot ett fjärranslutet Linux-system eller WSL.
Nu kan du använda Ninja (ett byggsystem som utvärderar inkrementella versioner mycket snabbt) för att förbättra inkrementella byggtider för MSBuild-baserade Linux-projekt. Du kan välja den här funktionen genom att ange "Aktivera inkrementell version" till "With Ninja" på sidan Allmän egenskap. Ninja (ninja-build) måste vara installerad på ditt fjärranslutna Linux-system eller WSL.
Nya C++20-standardbiblioteksfunktioner har implementerats. En detaljerad lista finns i STL Changelog på GitHub .
Nu kan du redigera och ange standard fjärr-SSH-anslutningar i Anslutningshanteraren. Det innebär att du kan redigera en befintlig fjärranslutning (till exempel om dess IP-adress har ändrats) och ange standardanslutningar som ska användas i CMakeSettings.json och launch.vs.json. Med fjärr-SSH-anslutningar kan du skapa och felsöka C++-projekt på ett fjärranslutet Linux-system direkt från Visual Studio.
Förbättrat IntelliSense-stöd för Clang på Windows (clang-cl) i Visual Studio. Clang inkluderar sökvägen innehåller nu clang-biblioteken, vi har förbättrat växlingsskärmen i redigeraren när du använder std-biblioteket och vi har lagt till stöd för C++2a i clang-läge.
Nu kan du prova att understryka kodfel och se fler föreslagna snabbkorrigeringar i C++-projekt. Aktivera den här funktionen under Verktyg > Alternativ > Textredigerare > C/C++ > Experimentell. Ange Inaktivera experimentell kod linter till false. Läs mer på C++-teamets blogg.
Vi har lagt till fyra nya kodanalysregler för att införliva ytterligare säkerhetsfunktioner i C++: C26817, C26818, C26819 och C26820.
Vi har lagt till förstklassigt stöd för felsökning av CMake-projekt på fjärrsystem med gdbserver.
Hitta fel med minnesskada enkelt med en experimentell implementering av AddressSanitizer för C++ i Visual Studio, som nu är tillgängligt för x64-interna projekt. Nu har vi även stöd för användning av felsökningskörningar (
/MTd,/MDd,/LDd).IntelliSense har nu grundläggande stöd för begrepp, avsedda initierare och flera andra C++20-funktioner.
.ixxoch.cppmfiler identifieras nu som C++ och behandlas som sådana av syntaxmarkeringen och IntelliSense.
Nyheter för C++ i Visual Studio version 16.6
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.6 finns i Nyheter i Visual Studio 2019 version 16.6.
Förbättrad generering av Doxygen/XML-kommentarer: Generera automatiskt Doxygen- eller XML-dokumentkommentar genom att
///skriva eller/**över funktioner. Dessa visas nu även i knappbeskrivningar för snabbinformation.Ninja-stöd för CMake för Linux/WSL: Använd Ninja som underliggande generator när du skapar CMake-projekt på WSL eller ett fjärrsystem. Ninja är nu standardgeneratorn när du lägger till en ny Linux- eller WSL-konfiguration.
Felsökningsmallar för fjärr-CMake-felsökning: Vi har förenklat mallarna för felsökning av CMake-projekt på ett fjärranslutet Linux-system eller WSL med gdb.
Initialt stöd för C++20-begrepp: IntelliSense känner nu igen C++20-begrepp och föreslår dem i medlemslistan.
Nyheter för C++ i Visual Studio version 16.5
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.5 finns i Nyheter i Visual Studio 2019 version 16.5.
IntelliCode Team Completions-modellen och medlemsvariabler stöder: C++-utvecklare kan nu träna IntelliCode-modeller på sina egna kodbaser. Vi kallar detta för en teamavslutsmodell eftersom du drar nytta av teamets metoder. Dessutom har vi förbättrat IntelliCode-förslag för medlemsvariabler.
IntelliSense-förbättringar:
- IntelliSense visar nu mer läsbara typnamn när du hanterar standardbiblioteket.
- Vi har lagt till möjligheten att växla om funktionen Retur, Blanksteg och Tabb ska fungera som incheckningstecken och växla om Tab används för att infoga kodfragment. Hitta de här inställningarna under Verktyg > Alternativ > Textredigerare > C/C++ > Advanced > IntelliSense.
Anslutningshanteraren över kommandoraden: Nu kan du interagera med dina lagrade fjärranslutningar via kommandoraden. Det är användbart för uppgifter som att etablera en ny utvecklingsdator eller konfigurera Visual Studio i kontinuerlig integrering.
Felsöka och distribuera för WSL: Använd Visual Studio:s inbyggda stöd för WSL för att separera byggsystemet från fjärrdistributionssystemet. Nu kan du bygga internt på WSL och distribuera byggartefakterna till ett andra fjärrsystem för felsökning. Det här arbetsflödet stöds av både CMake-projekt och MSBuild-baserade Linux-projekt.
Stöd för FIPS 140-2-efterlevnadsläge: Visual Studio har nu stöd för FIPS 140-2-efterlevnadsläge när du utvecklar C++-program som riktar sig mot ett fjärranslutet Linux-system.
Språktjänster för CMake Language-filer och bättre CMake-projektmanipulering:
Källfilkopian för CMake-projekt som riktar sig mot ett fjärranslutet Linux-system har optimerats. Visual Studio behåller nu en "fingeravtrycksfil" för den senaste uppsättningen källor som kopierats via fjärranslutning och optimerar beteendet baserat på antalet filer som har ändrats.
Kodnavigeringsfunktioner som Go To Definition och Find All References stöds nu för funktioner, variabler och mål i CMake-skriptfiler.
Lägg till, ta bort och byt namn på källfiler och mål i dina CMake-projekt från IDE:t utan att redigera CMake-skripten manuellt. När du lägger till eller tar bort filer med Solution Explorer redigerar Visual Studio automatiskt ditt CMake-projekt. Du kan också lägga till, ta bort och byta namn på projektets mål från Solution Explorers målvy.
Förbättringar av Linux-projekt: Visual Studio Linux-projekt har nu mer exakta IntelliSense och gör att du kan styra synkroniseringen av fjärrhuvuden projekt för projekt.
Nyheter för C++ i Visual Studio version 16.4
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.4 finns i Nyheter i Visual Studio 2019 version 16.4.
Kodanalys har nu inbyggt stöd
Clang-Tidyför både MSBuild- och CMake-projekt, oavsett om du använder en Clang- eller MSVC-verktygsuppsättning. clang-tidy-kontroller kan köras som en del av bakgrundskodanalys, visas som varningar i redigeraren (squiggles) och visas i fellistan.Visual Studio CMake-projekt har nu Översiktssidor som hjälper dig att komma igång med plattformsoberoende utveckling. Dessa sidor är dynamiska och hjälper dig att ansluta till ett Linux-system och lägga till en Linux- eller WSL-konfiguration i ditt CMake-projekt.
Den nedrullningsbara menyn för CMake-projekt visar nu dina senast använda mål och kan filtreras.
C++/CLI stöder nu interop med .NET Core 3.1 och senare i Windows.
Nu kan du aktivera ASan för projekt som kompilerats med MSVC i Windows för körningsinstrumentation av C++-kod som hjälper till med identifiering av minnesfel.
Uppdateringar av MSVC:s C++-standardbibliotek:
- C++17: Implementerad
to_chars()allmän precision och slutför P0067R5 elementära strängkonverteringar (charconv). Detta slutför implementeringen av alla biblioteksfunktioner i C++17 Standard. - C++20: Implementerad P1754R1 Byta namn på begrepp till standard_case. Om du vill inkludera dessa funktioner använder du kompileringsalternativet
/std:c++latest(eller/std:c++20från och med Visual Studio 2019 version 16.11). Alternativet kan också anges på projektegenskapssidan Konfigurationsegenskaper > C/C++ > Språk med egenskapen C++ Language Standard .
- C++17: Implementerad
En ny samling verktyg med namnet C++ Build Insights är nu tillgänglig. Mer information om meddelandet finns i C++-teamets blogg.
Nyheter för C++ i Visual Studio version 16.3
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.3 finns i Nyheter i Visual Studio 2019 version 16.3.
C++-utvecklare kan nu växla linjekommentarer med kortkommandot Ctrl+K, Ctrl+/.
IntelliSense-medlemslistor filtreras nu baserat på typkvalificerare,
const std::vectortill exempel filtrerar nu bort metoder sompush_back.Vi har lagt till dessa C++20 Standard Library-funktioner (tillgängliga under
/std:c++latest, eller/std:c++20från och med Visual Studio 2019 version 16.11):Nya C++ Core-riktlinjekontroller, inklusive den nya regeluppsättningen "Uppräkningsregler" och ytterligare
const,enumoch typregler.Med ett nytt semantiskt standardfärgschema kan användarna bättre förstå sin kod snabbt, anropsstackfönstret kan konfigureras för att dölja mallargument och C++ IntelliCode är on-by-default.
Konfigurera felsökningsmål och anpassade uppgifter med miljövariabler med hjälp av CMakeSettings.json eller CppProperties.json eller den nya taggen "env" för enskilda mål och uppgifter i launch.vs.json och tasks.vs.json.
Användare kan nu använda en snabbåtgärd på saknade vcpkg-paket för att automatiskt öppna en konsol och installera till standardinstallationen av vcpkg.
Fjärrhuvudkopian som görs av Linux-projekt (CMake och MSBuild) har optimerats och körs nu parallellt.
Visual Studios inbyggda stöd för WSL stöder nu parallella versioner för MSBuild-baserade Linux-projekt.
Användare kan nu ange en lista över lokala build-utdata som ska distribueras till ett fjärrsystem med Linux Makefile-projekt.
Inställningsbeskrivningar i CMake-inställningsredigeraren innehåller nu mer kontext och länkar till användbar dokumentation.
C++-basmodellen för IntelliCode är nu aktiverad som standard. Du kan ändra den här inställningen genom att gå till Verktygsalternativ>>IntelliCode.
Nyheter för C++ i Visual Studio version 16.2
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.2 finns i Nyheter i Visual Studio 2019 version 16.2.
För lokala CMake-projekt som konfigurerats med Clang kör kodanalys nu clang-tidy-kontroller, som visas som en del av bakgrundskodanalys som varningar i redigeraren (squiggles) och i fellistan.
<charconv>Rubriken för C++17:s P0067R5 Elementära strängkonverteringar har uppdaterats:- Flyttalsöverlagringar
to_chars()har lagts till förchars_format::fixedochchars_format::scientificprecision (chars_format::general precisionär den enda delen som ännu inte implementerats) - Optimerad
chars_format::fixedkortast
- Flyttalsöverlagringar
De här funktionerna för C++20-standardbibliotek har lagts till:
- Tillgänglig under
/std:c++latest(eller/std:c++20från och med Visual Studio 2019 version 16.11): - Tillgänglig under
/std:c++17och/std:c++latest(eller/std:c++20med början i Visual Studio 2019 version 16.11):-
P0600R1:
[[nodiscard]]i biblioteket
-
P0600R1:
- Tillgänglig villkorslöst:
- Tillgänglig under
Windows SDK är inte längre ett beroende för komponenterna CMake för Windows och CMake för Linux.
Förbättringar av C++-länkaren för att avsevärt förbättra iterationens byggtider för den största av indata.
/DEBUG:FASToch/INCREMENTALtiderna är i genomsnitt dubbelt så snabba och/DEBUG:FULLär nu tre till sex gånger snabbare.
Nyheter för C++ i Visual Studio version 16.1
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.1 finns i Nyheter i Visual Studio 2019 version 16.1.
C++-kompilator
Dessa C++20-funktioner har implementerats i C++-kompilatorn, som finns under
/std:c++latest(eller/std:c++20med början i Visual Studio 2019 version 16.11):Lambda-stödet har setts över och åtgärdar ett stort antal långvariga buggar. Den här ändringen är aktiverad som standard när du använder
/std:c++20eller/std:c++latest. I/std:c++17språkläge och under standardläget (/std:c++14) kan den nya parsern aktiveras med hjälp av i Visual Studio 2019 version 16.9 eller senare (tidigare tillgänglig som/experimental:newLambdaProcessorfrån och med/Zc:lambdaVisual Studio 2019 version 16.3), till exempel/std:c++17 /Zc:lambda.
Förbättringar av C++-standardbibliotek
- Dessa C++20-funktioner har lagts till i vår implementering av C++-standardbiblioteket, som finns under
/std:c++latest:-
starts_withochends_withförbasic_stringochbasic_string_view. -
containsför associativa containrar. -
remove,remove_if, ochuniqueförlistochforward_listreturnerarsize_typenu . -
shift_leftochshift_righthar lagts till i<algorithm>.
-
C++ IDE
IntelliCode för C++
IntelliCode levereras nu som en valfri komponent i Skrivbordsutveckling med C++ -arbetsbelastning. Mer information finns i Förbättrad C++ IntelliCode levereras nu med Visual Studio 2019.
IntelliCode använder sin egen omfattande utbildning och din kodkontext för att placera det du mest sannolikt kommer att använda överst i slutförandelistan. Det kan ofta eliminera behovet av att rulla nedåt i listan. För C++, erbjuder IntelliCode mest hjälp när du använder populära bibliotek, till exempel standardbiblioteket.
De nya IntelliCode-funktionerna (anpassade modeller, C++-stöd och EditorConfig-slutsatsdragning) är inaktiverade som standard. Om du vill aktivera dem går du till Verktygsalternativ >> IntelliCode > Allmänt. Den här versionen av IntelliCode har förbättrad noggrannhet och har stöd för kostnadsfria funktioner. Mer information finns iAI-Assisted förslag på kodkomplettering kommer till C++ via IntelliCode.
Förbättringar av snabbinformation
- Snabbinformationsverktyget respekterar nu redigerarens semantiska färgläggning. Den har också en ny Search Online-länk som söker i onlinedokumentationen efter information om den hovrade kodkonstruktionen. Länken som tillhandahålls av Snabbinformation för röd-squiggled-kod söker efter felet online. På så sätt behöver du inte skriva in meddelandet i webbläsaren igen. Mer information finns i Förbättringar av snabbinformation i Visual Studio 2019: Colorization och Search Online.
Allmänna förbättringar
Mallfältet kan fylla i den nedrullningsbara menyn baserat på instansieringar av mallen i din kodbas.
Glödlampor för saknade
#includedirektiv som vcpkg kan installera och automatisk komplettering av tillgängliga paket för CMake-direktivetfind_package.Sidan Allmän egenskap för C++-projekt har ändrats. Vissa alternativ visas nu under en ny avancerad sida. Sidan Avancerat innehåller även nya egenskaper för din föredragna verktygsuppsättningsarkitektur, felsökningsbibliotek, msvc-verktygsuppsättningens delversion och Unity-versioner (jumbo).
CMake-stöd
Vi har uppdaterat CMake-versionen som levereras med Visual Studio till 3.14. Den här versionen lägger till inbyggt stöd för MSBuild-generatorer som riktar sig till Visual Studio 2019-projekt samt filbaserade IDE-integrerings-API:er.
Vi har lagt till förbättringar i CMake-inställningsredigeraren, inklusive stöd för Windows Undersystem för Linux (WSL) och konfigurationer från befintliga cacheminnen, ändringar i standardversionen och installationsrötterna samt stöd för miljövariabler i Linux CMake-konfigurationer.
Slutföranden och snabbinformation för inbyggda CMake-kommandon, variabler och egenskaper gör det enklare att redigera dina
CMakeLists.txtfiler.Vi har integrerat stöd för redigering, skapande och felsökning av CMake-projekt med Clang/LLVM. Mer information finns i Clang/LLVM-stöd i Visual Studio.
Linux och Windows-undersystemet för Linux
Vi stöder nu AddressSanitizer (ASan) i Linux- och CMake-plattformsprojekt. Mer information finns i AddressSanitizer (ASan) för Linux-arbetsbelastningen i Visual Studio 2019.
Vi har integrerat Visual Studio-stöd för att använda C++ med Windows-undersystemet för Linux (WSL). Nu kan du använda din lokala Installation av Windows Undersystem för Linux (WSL) med C++ internt i Visual Studio utan ytterligare konfiguration eller SSH-anslutning. Mer information finns i C++ med Visual Studio 2019 och Windows Undersystem för Linux (WSL).
Kodanalys
- Nya snabbkorrigeringar för oinitierade variabelkontroller har lagts till. Code Analysis warnings C6001: using uninitialized memory
<variable>and C26494 VAR_USE_BEFORE_INIT are available in the lightbulb menu on relevant lines. De är aktiverade som standard i regeluppsättningen Microsoft Native Minimum och C++ Core Check Type-regeluppsättningar. Mer information finns i Snabbkorrigeringar för ny kodanalys för oinitierat minne (C6001) och användning före init-varningar (C26494).
Fjärrversioner
Användare kan nu separera fjärrbyggdatorer från fjärrfelsökningsdatorer när de riktar in sig på Linux i både MSBuild- och CMake-projekt.
Den förbättrade loggningen för fjärranslutningar gör det enklare att diagnostisera problem i plattformsoberoende utveckling.
Nyheter för C++ i Visual Studio version 16.0
En sammanfattning av nya funktioner och felkorrigeringar i Visual Studio version 16.0 finns i Nyheter i Visual Studio 2019 version 16.0.
C++-kompilator
Förbättrat stöd för C++17-funktioner och korrigeringar av korrekthet, plus experimentellt stöd för C++20-funktioner som moduler och coroutines. Detaljerad information finns i Förbättringar av C++-överensstämmelse i Visual Studio 2019.
Alternativet
/std:c++latestinnehåller nu C++20-funktioner som inte nödvändigtvis är kompletta, inklusive inledande stöd för C++20-operatorn<=>("spaceship") för trevägsjämförelse.C++-kompilatorväxeln
/Gmär nu inaktuell. Överväg att inaktivera växeln/Gmi byggskripten om den uttryckligen har definierats. Men du kan också ignorera utfasningsvarningen på ett säkert sätt för/Gm, eftersom den inte behandlas som ett fel när du använder "Behandla varningar som fel" (/WX).När MSVC börjar implementera funktioner från C++20-standardutkastet
/std:c++latestunder flaggan/std:c++latestär det nu inte kompatibelt med/clr(alla smaker),/ZWoch/Gm. I Visual Studio 2019 använder/std:c++17eller/std:c++14lägen när du kompilerar med/clr,/ZWeller/Gm(men se föregående punkt).Förkompilerade rubriker genereras inte längre som standard för C++-konsolen och skrivbordsappar.
Codegen, säkerhet, diagnostik och versionshantering
Förbättrad analys med /Qspectre för att ge åtgärdshjälp för Spectre Variant 1 (CVE-2017-5753). Mer information finns i Spectre Mitigations i MSVC.
Förbättringar av C++-standardbibliotek
Implementering av ytterligare C++17- och C++20-biblioteksfunktioner och korrigeringar av korrekthet. Detaljerad information finns i Förbättringar av C++-överensstämmelse i Visual Studio 2019.
Clang-Format har tillämpats på C++-standardbibliotekshuvuden för bättre läsbarhet.
Eftersom Visual Studio nu stöder Just My Code för C++, behöver standardbiblioteket inte längre tillhandahålla anpassade maskiner för
std::functionochstd::visituppnå samma effekt. Att ta bort maskinerna har till stor del inga användar synliga effekter. Ett undantag är att kompilatorn inte längre genererar diagnostik som indikerar problem på rad 15732480 eller 16707566 av<type_traits>eller<variant>.
Prestanda-/dataflödesförbättringar i kompilatorn och standardbiblioteket
Skapa dataflödesförbättringar, inklusive hur länkaren hanterar fil-I/O och länktid i PDB-typsammanslagningen och skapandet.
Grundläggande stöd har lagts till för OpenMP SIMD-vektorisering. Du kan aktivera den med hjälp av den nya kompilatorväxeln
/openmp:experimental. Det här alternativet tillåter att loopar som kommenteras med#pragma omp simdkan vektoriseras. Vektoriseringen är inte garanterad och loopar som kommenteras men som inte är vektoriserade får en varning rapporterad. Inga SIMD-satser stöds. de ignoreras och en varning rapporteras.Lade till en ny inlining kommandoradsväxel
/Ob3, som är en mer aggressiv version av/Ob2./O2(optimera binärfilen för hastighet) innebär/Ob2fortfarande som standard. Om du upptäcker att kompilatorn inte är tillräckligt aggressiv kan du överväga att skicka/O2 -Ob3.Vi har lagt till stöd för SVML-inbyggda funktioner (Short Vector Math Library). Dessa funktioner beräknar vektormotsvarigheterna 128-bitars, 256- eller 512-bitarsvektor. Vi har lagt till dem för att stödja handvektorisering av loopar med anrop till matematiska biblioteksfunktioner och vissa andra åtgärder som heltalsdivision. Se Intels inbyggda guide för definitioner av de funktioner som stöds.
Nya och förbättrade optimeringar:
Konstant vikning och aritmetiska förenklingar för uttryck med hjälp av SIMD-vektorer, för både flyttal- och heltalsformer.
En kraftfullare analys för att extrahera information från kontrollflödet (if/else/switch-instruktioner) för att ta bort grenar som alltid visat sig vara sanna eller falska.
Förbättrad avregistrering av memset för användning av SSE2-vektorinstruktioner.
Förbättrad borttagning av värdelösa struct/klasskopior, särskilt för C++-program som passerar efter värde.
Förbättrad optimering av kod med hjälp av
memmove, till exempelstd::copyellerstd::vectorochstd::stringkonstruktion.
Optimerade den fysiska designen för standardbiblioteket för att undvika att kompilera delar av standardbiblioteket som inte ingår direkt. Den här ändringen minskade byggtiden för en tom fil som bara
<vector>innehåller hälften. Därför kan du behöva lägga#includetill direktiv för rubriker som tidigare indirekt inkluderades. Kod som använderstd::out_of_rangekan till exempel nu behöva lägga#include <stdexcept>till . Kod som använder en ströminfogningsoperator kan nu behöva lägga#include <ostream>till . Fördelen är att endast översättningsenheter som faktiskt använder<stdexcept>eller<ostream>komponenter betalar dataflödeskostnaden för att kompilera dem.if constexprtillämpades på fler platser i standardbiblioteket för förbättrat dataflöde och minskad kodstorlek i kopieringsåtgärder, i permutationer som omvänd och rotera och i biblioteket för parallella algoritmer.Standardbiblioteket använder
if constexprnu internt för att minska kompileringstiderna, även i C++14-läge.Den dynamiska länkidentifieringen för körning för biblioteket för parallella algoritmer använder inte längre en hel sida för att lagra funktionspekarmatrisen. Att markera det här minnet med skrivskydd ansågs inte längre relevant i säkerhetssyfte.
Konstruktorn
std::threadväntar inte längre på att tråden ska starta och infogar inte längre så många lager funktionsanrop mellan det underliggande C-biblioteket_beginthreadexoch det angivna anropsbara objektet. Placera tidigarestd::threadsex funktioner mellan_beginthreadexoch det angivna anropsbara objektet. Det här antalet har minskats till endast tre, varav två barastd::invokeär . Den här ändringen löser också en obskyr tidsfel, där enstd::threadkonstruktor slutar svara om systemklockan ändras exakt när denstd::threadskapades.En prestandaregression har åtgärdats i
std::hashden som vi introducerade när vi implementeradestd::hash<std::filesystem::path>.Standardbiblioteket använder nu destruktorer i stället för fångstblock på flera platser för att uppnå korrekthet. Den här ändringen resulterar i bättre interaktion med felsökningsprogrammet: Undantag som du genererar genom standardbiblioteket på de berörda platserna visas nu som kastade från deras ursprungliga kastwebbplats i stället för vår återväxt. Alla standardbiblioteksfångstblock har inte eliminerats. Vi förväntar oss att antalet fångstblock minskas i senare versioner av MSVC.
Suboptimal codegen i
std::bitsetorsakad av ett villkorligt kast inuti ennoexceptfunktion har åtgärdats genom att väga ut den utlösande sökvägen.std::unordered_*Och-familjenstd::listanvänder iteratorer som inte felsöker internt på fler platser.Flera
std::listmedlemmar har ändrats för att återanvända listnoder där det är möjligt i stället för att frigöra och omplacera dem. Till exempel, med tanke på enlist<int>som redan har storleken 3, skriverintett anrop tillassign(4, 1729)nu över värdena i de tre första listnoderna och allokerar en ny listnod med värdet 1729.Alla standardbiblioteksanrop till
erase(begin(), end())ändrades tillclear().std::vectorinitierar och raderar nu elementen mer effektivt i vissa fall.Förbättringar för att
std::variantgöra det mer optimerarvänligt, vilket resulterar i bättre genererad kod. Kod inlining är nu mycket bättre medstd::visit.
C++ IDE
Stöd för Live Share C++
Live Share stöder nu C++, vilket gör att utvecklare som använder Visual Studio eller Visual Studio Code kan samarbeta i realtid. Mer information finns i Meddela liveresurs för C++: Real-Time delning och samarbete
Mall intelliSense
Mallfältet använder nu användargränssnittet för peek-fönstret i stället för ett modalt fönster, stöder kapslade mallar och fyller i standardargumenten i fönstret Granska. Mer information finns i Mall IntelliSense-förbättringar för Visual Studio 2019 Preview 2. Med listrutan Senast använd i mallfältet kan du snabbt växla mellan tidigare uppsättningar med exempelargument.
Ny startfönsterupplevelse
När du startar IDE visas ett nytt Start-fönster. Den har alternativ för att öppna de senaste projekten, klona kod från källkoden, öppna lokal kod som en lösning eller en mapp eller skapa ett nytt projekt. Dialogrutan Nytt projekt har också setts över till en sökinriktad, filterbar upplevelse.
Nya namn för vissa projektmallar
Vi har ändrat flera namn och beskrivningar för projektmallar så att de passar med den uppdaterade dialogrutan Nytt projekt.
Olika produktivitetsförbättringar
Visual Studio 2019 innehåller följande funktioner som gör kodningen enklare och mer intuitiv:
- Snabbkorrigeringar för:
- Lägg till saknas
#include -
NULLtillnullptr - Lägg till semikolon som saknas
- Lösa namnområde eller omfång som saknas
- Ersätt felaktiga indirekta operander (
*till&och&till*)
- Lägg till saknas
- Snabbinformation för ett block genom att hovra på avslutande klammerparentes
- Granska rubrik/kodfil
- Gå till Definition på
#includeöppnar filen
Mer information finns i C++ Produktivitetsförbättringar i Visual Studio 2019 Preview 2.
CMake-stöd
Stöd för CMake 3.14
Visual Studio kan nu öppna befintliga CMake-cacheminnen som genereras av externa verktyg, till exempel CMakeGUI, anpassade metabyggsystem eller byggskript som anropar själva cmake.exe.
Förbättrad IntelliSense-prestanda.
En ny inställningsredigerare är ett alternativ till att redigera CMakeSettings.json filen manuellt och ger viss paritet med CMakeGUI.
Visual Studio hjälper dig att starta C++-utvecklingen med CMake i Linux genom att identifiera om du har en kompatibel version av CMake på din Linux-dator. Om inte, erbjuder det att installera det åt dig.
Inkompatibla inställningar i CMakeSettings, till exempel felmatchade arkitekturer eller inkompatibla CMake-generatorinställningar, visar squiggles i JSON-redigeraren och fel i fellistan.
Verktygskedjan vcpkg identifieras automatiskt och aktiveras för CMake-projekt som öppnas i IDE när
vcpkg integrate installde har körts. Det här beteendet kan inaktiveras genom att ange en tom verktygsringsfil i CMakeSettings.CMake-projekt aktiverar nu Just My Code-felsökning som standard.
Statiska analysvarningar bearbetas nu i bakgrunden och visas i redigeraren för CMake-projekt.
Tydligare kompilering och konfiguration av "start- och slutmeddelanden" för CMake-projekt och stöd för Visual Studio-gränssnittet för byggförlopp. Dessutom finns det nu en CMake-utförlig inställning i Verktygsalternativ > för att anpassa detaljnivån för CMake-kompilerings- och konfigurationsmeddelanden i utdatafönstret.
Inställningen
cmakeToolchainstöds nu i CMakeSettings.json för att ange verktygskedjor utan att ändra CMake-kommandoraden manuellt.En ny build all-menygenväg Ctrl+Skift+B.
IncrediBuild-integrering
IncrediBuild ingår som en valfri komponent i skrivbordsutvecklingen med C++- arbetsbelastning. IncrediBuild Build Monitor är helt integrerad i Visual Studio IDE. Mer information finns i Visualisera din version med IncrediBuilds Build Monitor och Visual Studio 2019.
Felsökning
För C++-program som körs i Windows läses PDB-filer nu in i en separat 64-bitarsprocess. Den här ändringen åtgärdar ett intervall med krascher som orsakas av att felsökningsprogrammet får slut på minne. När du till exempel felsöker program som innehåller ett stort antal moduler och PDB-filer.
Sökningen är aktiverad i rutorna Watch, Autos och Locals .
Windows-skrivbordsutveckling med C++
Dessa C++ ATL/MFC-guider är inte längre tillgängliga:
- Guiden ATL COM+ 1.0-komponent
- Komponentguide för ATL Active Server Pages
- Guiden ATL OLE DB-provider
- Guiden FÖR ATL-egenskapssida
- Konsumentguide för ATL OLE DB
- MFC ODBC-konsument
- MFC-klass från ActiveX-kontroll
- MFC-klass från Typ Lib.
Exempelkoden för dessa tekniker arkiveras i Microsoft Learn och GitHub-lagringsplatsen VCSamples.
Windows 8.1 Software Development Kit (SDK) är inte längre tillgängligt i Installationsprogrammet för Visual Studio. Vi rekommenderar att du uppgraderar dina C++-projekt till den senaste Windows SDK:t. Om du har ett hårt beroende av 8.1 kan du ladda ned det från Windows SDK-arkivet.
Windows XP-mål kommer inte längre att vara tillgängligt för de senaste C++-verktygen. XP-mål med MSVC-kompilatorbibliotek på VS 2017-nivå stöds fortfarande och kan installeras via "Enskilda komponenter".
Vår dokumentation avråder aktivt från användning av Sammanslagningsmoduler för Visual C++ Runtime-distribution. Vi tar det extra steget i den här versionen av att markera våra MSM:er som inaktuella. Överväg att migrera din centrala VCRuntime-distribution från MSM till det omdistribuerbara paketet.
Mobil utveckling med C++ (Android och iOS)
C++ Android-upplevelsen är nu som standard Android SDK 25 och Android NDK 16b.
Clang/C2 plattformsverktyg
Den experimentella komponenten Clang/C2 har tagits bort. Använd MSVC-verktygsuppsättningen för fullständig C++-standardefterlevnad med /permissive- och /std:c++17, eller Clang/LLVM-verktygskedjan för Windows.
Kodanalys
Kodanalys körs nu automatiskt i bakgrunden. Varningar visas som gröna squiggles i redigeraren när du skriver. Mer information finns i Kodanalys i redigeringsprogrammet i Visual Studio 2019 Preview 2.
Nya experimentella ConcurrencyCheck-regler för välkända standardbibliotekstyper från
<mutex>rubriken. Mer information finns i Samtidighetskodanalys i Visual Studio 2019.En uppdaterad partiell implementering av lifetime-profilkontrollen, som identifierar dinglande pekare och referenser. Mer information finns i Uppdatering av livslängdsprofil i Visual Studio 2019 Preview 2.
Fler coroutine-relaterade kontroller, inklusive C26138, C26810, C26811 och den experimentella regeln C26800. Mer information finns i Nya kodanalyskontroller i Visual Studio 2019: use-after-move och coroutine.
Enhetstestning
Mallen Managed C++ Test Project är inte längre tillgänglig. Du kan fortsätta att använda ramverket för hanterat C++-test i dina befintliga projekt. För nya enhetstester bör du överväga att använda ett av de interna testramverk för vilka Visual Studio tillhandahåller mallar (MSTest, Google Test) eller mallen För hanterat C#-testprojekt.