Dela via


Nyheter för C++ i Visual Studio 2022

Visual Studio 2022 innehåller många uppdateringar och korrigeringar till Microsoft C++-kompilatorn och verktygen. Visual Studio IDE erbjuder också betydande förbättringar av prestanda och produktivitet och körs nu internt som ett 64-bitarsprogram.

Nyheter för C++ i Visual Studio version 17.13

släpptes februari 2025

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.13
Standardbiblioteket (STL) sammanfogade C++26- och C++23-funktioner, lösningar på LWG-problem, prestandaförbättringar, förbättrat beteende och fixade buggar. STL Ändringslogg 17.13
Nya funktioner i IDE Visual Studio 2022 version 17.13 Versionsinformation
C++-språkuppdateringar MSVC-kompilatoruppdateringar i Visual Studio 2022 17.13
Förbättringar av språkefterlevnad i C++ förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022 17.13

En snabb markering av några av de nya funktionerna:

  • C++-språkförbättringar

    • Prova förhandsgranskningsfunktionerna i C++23 genom att ange C++ Language Standard till /std:c++23preview. Den här inställningen aktiverar de senaste C++23-funktionerna och felkorrigeringarna. Mer information finns i /std (Ange språkstandardversion).

    • Stöd för C++23:s size_t literalsuffix, vilket hjälper till att undvika trunkeringar eller fel vid signerade jämförelser – särskilt när du skriver slingor. Till exempel:

      // Infinite loop if v.size > max unsigned int 
      for (auto i = 0u; i < v.size(); ++i)
      { 
        ...
      } 
      
      // Fixed because of uz literal 
      for (auto i = 0uz; i < v.size(); ++i)
      { 
        ...
      } 
      
    • Stöd för vektorlängder för kodgenerering på x86 och x64. För mer information, se /vlen.

    • Stöd för Intel Advanced Vector Extensions 10 version 1. Mer information om /arch:AVX10.1finns i /arch (x64).

  • förbättringar av standardbiblioteket

    • Standardbiblioteksstöd för couroutines. I det här exemplet från P2502R2är funktionen fib en coroutine. När co_yield-instruktionen körs pausas fib och värdet returneras till anroparen. Du kan återuppta fib coroutine senare för att skapa fler värden utan att kräva någon manuell tillståndshantering:

      std::generator<int> fib()
      { 
        auto a = 0, b = 1; 
      
        while (true)
        { 
            co_yield std::exchange(a, std::exchange(b, a + b)); 
        }
      } 
      
      int answer_to_the_universe()
      { 
        auto rng = fib() | std::views::drop(6) | std::views::take(3); 
        return std::ranges::fold_left(std::move(range), 0, std::plus{}); 
      } 
      
  • Flyttade system_clock, high_resolution_clockoch chrono_literals från en vanlig intern rubrik till <chrono>. Om du ser kompilatorfel där typer som system_clock eller användardefinierade literaler såsom 1729ms inte känns igen, inkludera <chrono>.

  • Förbättrade de vektoriserade implementeringarna av bitset konstruktorer från strängar, basic_string::find_last_of(), remove(), ranges::removeoch algoritmfamiljerna minmax_element() och minmax().

  • Vektoriserade implementeringar har lagts till av:

    • find_end() och ranges::find_end för element med 1 byte och 2 byte.
    • basic_string::find() och basic_string::rfind() för en delsträng.
    • basic_string::rfind() för ett enda tecken.
  • Sammanfogade felrapporter för C++23:

    • P3107R5 Tillåt ett effektivt genomförande av <print>.
    • P3235R3std::print Fler typer snabbare med mindre minne.
  • GitHub Copilot

    • GitHub Copilot Free är nu tillgängligt. Få 2 000 kodavslut och 50 chattförfrågningar per månad utan kostnad.

    • GitHub Copilot-kodkompletteringar ger förslag för automatisk komplettering infogade när du kodar. För att förbättra C++-utvecklarnas upplevelse innehåller GitHub Copilot andra relevanta filer som kontext. Detta minskar hallucinationer samtidigt som du erbjuder mer relevanta och korrekta förslag.

    • Nu kan du begära en kodgranskning från GitHub Copilot från fönstret Git-ändringar:

      En skärmbild av Git-ändringar-fönstret med knappen GitHub Copilot-granskning markerad.

      Fönstret Git-ändringar är öppet och knappen för GitHub Copilot-granskning är markerad.

      GitHub Copilot letar efter potentiella problem och skapar kommentarer för dem:

      En skärmbild av GitHub Copilot som förklarar ett problem.

      GitHub Copilot hittade ett problem med raden "if (is_enabled_) new_site.disable()". Det står att det kan vara ett misstag och bör sannolikt vara om ( is_enabled_) new_site.enable() eftersom avsikten verkar aktivera den nya webbplatsen om brytpunkten är aktiverad.

      Om du vill använda den här funktionen kontrollerar du att följande är aktiverat:

      • Verktyg>Alternativ>Förhandsgranskning av Funktioner>Kommentarer för Pull-begäranden
      • Verktyg>Alternativ>GitHub>Copilot>Källkontrollintegration>Aktivera Git-funktioner för förhandsgranskning.
    • GitHub Copilot Edits är en ny funktion som kan göra ändringar i flera filer i projektet. Om du vill starta en ny redigeringssession klickar du på Skapa ny redigeringssession överst i GitHub Copilot Chat-fönstret:

      En skärmbild av GitHub Copilot Chat-fönstret. Knappen Skapa ny redigeringssession är markerad.

      Beskriv de ändringar du vill göra och Copilot föreslår relevanta redigeringar. Du kan förhandsgranska redigeringarna en i taget och acceptera de du vill ha eller göra korrigeringar:

      En skärmbild av GitHub Copilot Chat-fönstret som visar de filer som redigerats.

      GitHub Copilot visar en sammanfattning av de ändringar som gjorts, till exempel 1. Skapa en ny underklass range_breakpoint i include/libsdb/breakpoint.hpp" och 2. Implementera klassen "range_breakpoint" i filen src/breakpoint.cpp. Ett alternativ för att acceptera ändringarna visas.

      Mer information finns i Iterera över flera filer mer effektivt med GitHub Copilot Edits.

  • CMake

    • Stöder nu CMake Presets v9. Nya makroexpansioner i ett förinställt inkluderingsfält. Mer information finns i Makroexpansion i den officiella CMake-dokumentationen.

Nyheter för C++ i Visual Studio version 17.12

släpptes november 2024

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.12
Standardbiblioteket (STL) sammanförde C++26- och C++23-funktioner, LWG-problemlösningar, prestandaförbättringar, förbättrat beteende och fixade buggar STL Changelog 17.12
Nya funktioner i Visual Studio 17.12 IDE Visual Studio 2022 version 17.12 Versionsinformation
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.12 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022 17.12

En snabb markering av några av de nya funktionerna:

  • Förbättringar av standardbiblioteket
    • C++23 Formateringsintervall (P2286R8) implementeringen har slutförts. Formatatorer har lagts till för containeradaptrarna stack, queueoch priority_queue.
    • Flerdimensionella indexoperatorer har lagts till, som också stöder <mdspan>. Till exempel: print("m[{}, {}]: '{}'; ", i, j, m[i, j]).
  • Spelutveckling i C++
  • Bygginsikter
    • Du kan köra Build Insights på valda filer. Välj de filer som du vill använda i Solution Explorer, högerklicka och välj Kör Build Insights på markerade filer: En skärmbild av filer i Solution Explorer. Snabbmenyn är öppen och alternativet Att köra Build Insights på valda filer är markerat.
    • Du kan filtrera Build Insights-resultat efter projekt. Klicka på filterknappen i filterkolumnrubriken och välj de projekt som du vill visa resultat för: En skärmbild av fönstret Build Insights med fliken Inkluderade filer öppen. Filterknappen har valts och en lista med projekt visas. Kryssrutor bredvid Två projekt är markerade.
    • Klicka på frågemarkeringsikonen i fönstret Build Insights för att se en kort beskrivning av flikarna i fönstret Build Insights och en länk till dokumentationen för en detaljerad förklaring: En skärmbild av fönstret Build Insights med knappen Visa förklaringar (ett frågetecken i en cirkel) markerat.
  • GitHub Copilot
    • Du kan klicka på Fråga Copilot bredvid värdet för en variabel för att få AI-drivna insikter om vad som ledde till dess aktuella tillstånd. Följande program har till exempel ett off-by-one-fel i loopvillkoret:

    En skärmbild av fönstret Automatiskt. Variabeln med namnet är NULL. Ikonen Fråga Copilot bredvid den är markerad.

    Koden som orsakade problemet är: för (auto it = h.animals_.begin(); den <= h.animals_.end(); it++).

    Om du klickar på ikonen Fråga Copilot för variabeln it visas varför den är <NULL>:

    En skärmbild av ett GitHub Copilot-fönster.

    Det här felet finns i en funktion som är definierad som int calculate_number_of_cats(const house& h). GitHub Copilot-meddelandet säger: "Värdet för uttrycket det är NULL, vilket innebär att iteratorn inte pekar på något giltigt element i vektor animals_. I programmets kontext ska det iterera över animals_-vektorn i husobjektet för att räkna antalet kattobjekt. Varför det är null. Baserat på lokal- och anropsstackens kontext: husobjektet h har en tom animals_ vektor (storlek =0). Loopvillkoret där <= h.animals_.end() är felaktigt. Det bör vara det != h.animals_.end().

    • Du kan klicka på Fråga Copilot om fel i Visual Studio Fellista för att få hjälp med felet och en föreslagen korrigering. Till exempel:

    En skärmdump av fönstret Fellista.

    Ikonen för Copilot är markerad bredvid ett fel där unique_ptr försöker hänvisa till en borttagen funktion.

    Om du klickar på Fråga Copilot får du information om felet:

    En skärmbild av GitHub Copilot-förklaringen till felet.

    Copilot-meddelandet säger: "Felet uppstår eftersom det intervallbaserade för loopen försökte kopiera std::unique_ptr objekt, vilket inte är tillåtet eftersom std::unique_ptr inte kan kopieras. För att åtgärda detta ändrade jag loopen så att den använde en referens för att undvika att kopiera objekten std::unique_ptr. På så sätt itererar loopen över referenser till objekten std::unique_ptr, vilket är tillåtet."

  • felsökning
    • Nya felsökningsvisualiserare för mutex, recursive_mutexoch move_iterator.
    • Felsökningsprogrammet visar nu returvärden direkt i koden: En skärmbild av ett verktygstips som visar värdet 8,25. Det är resultatet av uttrycket efter return-satsen som hoppades över.

Nyheter för C++ i Visual Studio version 17.11

släpptes augusti 2024

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.11
Standardbiblioteket (STL) sammanfogade C++26- och C++23-funktioner, C++20-felrapporter, LWG-problemmatchningar, prestandaförbättringar, förbättrat beteende och fasta buggar STL Ändringslogg 17.11
Nya funktioner i Visual Studio 17.11 IDE Visual Studio 2022 version 17.11 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.11 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022 17.11

En partiell lista över nya funktioner:

  • Förbättringar av standardbiblioteket

    • Den formaterade utdataimplementeringen innehåller nu std::range_formatter och formaterare för std::pair och std::tuple.
    • Det har lagts till stöd för std::println() utan argument. Detta skriver ut en tom rad enligt förslaget i P3142R0.
    • Förbättrad vektorisering för flera algoritmer, inklusive replace_copy(), replace_copy_if(), ranges::replace_copy, ranges::replace_copy_if, find_first_of() och ranges::find_first_of, för 8-bitars- och 16-bitarselement, mismatch(), ranges::mismatch, count()ranges::count, find(), ranges::find, ranges::find_lastoch ranges::iota.
  • Spelutveckling i C++

    • Nu kan du lägga till vanliga Unreal Engine-klassmallar, moduler och plugin-program från Visual Studio. Mer information finns i Lägg till Unreal Engine-klasser, moduler och plugin-program i Visual Studio.
    • Det nya verktygsfältet Unreal Engine ger snabb åtkomst till Unreal Engine-relaterade åtgärder inifrån Visual Studio. Med verktygsfältet kan du snabbt ansluta till Unreal Engine-processer, genomsöka skisscachen igen, snabbt komma åt loggen för unreal engine och ge snabb åtkomst till konfigurationssidan för Unreal Engine för Visual Studio. Mer information finns i verktygsfältet Unreal Engine.
    • Nu kan du filtrera spårningsresultat efter projekt. Dessutom visar resultaten i varje rad den relativa sökvägen och filnamnet i stället för den fullständiga sökvägen. Resultatgruppering i vyn Inkluderade filer har också förbättrats:

    En skärmbild av de förbättrade diagnostikresultaten för inkluderade filer.

    Vyn Inkluderade filer har en ny kolumn för projektet. Kolumnen Projekt är markerad och projekt som (Välj alla), CompilerIdC, OpenAL, common och så vidare, väljs. De inkluderade filerna visas efter relativ sökväg och filnamn och grupperas tillsammans.

  • CMake-felsökning

    • Nu kan du felsöka dina CMake-skript och CMakeLists.txt filer i Visual Studio-felsökningsprogrammet för CMake-projekt som riktar in sig på Linux via Windows-undersystem för Linux (WSL) eller SSH. Om du vill starta en CMake-felsökningssession i Visual Studio anger du en brytpunkt i filen CMakeLists.txt och navigerar sedan till Project>Configure Cache with CMake Debugging.
  • GitHub Copilot

    • När du hovra över symboler i kodredigeraren klickar du på knappen Berätta mer i dialogrutan Snabbinformation om du vill veta mer om en viss symbol:

    En skärmbild av fönstret Snabbinformation.

    Fönstret Snabbinformation visas ovanför en funktion. Länken Berätta mer är markerad.

    • GitHub Copilot kan generera namngivningsförslag för dina identifierare (variabler, metoder eller klasser) baserat på hur identifieraren används och kodformatet.

      En skärmbild av dialogrutan Byt namn på GitHub Copilot.

      Dialogrutan Byt namn har ett nytt namnfält med en listruta som visar följande alternativ: text_color, font_color, display_color, console_color och menu_text_color.

    Du behöver en aktiv GitHub Copilot-prenumeration. Högerklicka på variabeln som du vill byta namn på och välj Byt namn på (Ctrl+R, Ctrl+R). Välj GitHub Copilots gnistrande ikon för att generera namngivningsförslag.

  • felsökning

    • Villkorliga brytpunkter i C++ är snabbare.
  • Diagnostikförbättringar

    • Förbättrad diagnostik vid anrop av std::get<T> på en std::tuple som har flera instanser av T i sina mallargument. MSVC brukade rapportera:
      error C2338: static_assert failed: 'duplicate type T in get<T>(tuple)'.
      Nu rapporterar den:
      error C2338: static_assert failed: 'get<T>(tuple<Types...>&) requires T to occur exactly once in Types.(N4971 [tuple.elemm]/5)'
    • Förbättrad diagnostik när std::ranges::to inte kan konstruera det begärda resultatet. MSVC brukade rapportera:
      error C2338: static_assert failed: 'the program is ill-formed per N4950 [range.utility.conv.to]/2.3'
      Nu rapporterar den:
      error C2338: static_assert failed: 'ranges::to requires the result to be constructible from the source range, either by using a suitable constructor, or by inserting each element of the range into the default-constructed object. (N4981 [range.utility.conv.to]/2.1.5)'

Nyheter för C++ i Visual Studio version 17.10

släpptes maj 2024

För mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.10
Standardbiblioteket (STL) sammanfogade C++26- och C++23-funktioner, C++20-felrapporter, LWG-problemmatchningar, prestandaförbättringar, förbättrat beteende och fasta buggar STL Changelog 17.10
Nya funktioner i Visual Studio 17.10 IDE Visual Studio 2022 version 17.10 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.10 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022 17.10

En partiell lista över nya funktioner:

  • MSVC Toolset Update: MSVC-verktygsuppsättningsversionen uppdateras från 19.39 till 19.40. Detta kan påverka projekt som har versionsantaganden. Mer information om hur detta påverkar projekt som förutsätter att MSVC-versionerna är alla 19.3X för Visual Studio 2022-versioner finns i MSVC Toolset Minor Version Number 14.40 in VS 2022 v17.10.
  • Förbättringar av standardbiblioteket: Standardbiblioteket har lagt till stöd för P2510R3 formateringspekare, vilket ger uppsättningen formatspecificerare för pekare när du använder std::format mer i linje med de som redan finns för heltal. Förbättrade de vektoriserade implementeringarna av std::min_element, std::ranges::minoch vänner.
  • Build Insights: Ger nu information om mallinstansiering. Se Mallvy för Build Insights i Visual Studio eller Pure Virtual C++ – Mallvyn för Build Insights i Visual Studio inspelning.
  • Unreal Engine Plugin: Det finns en ny opt-in-funktion för Unreal Engine Plugin att köras i bakgrunden, vilket minskar startkostnaderna. Det här är en opt-in-funktion som aktiveras via Tools>Options>Unreal Engine.
  • Nya funktioner för Linux: Se nya Linux-utvecklingsfunktioner i Visual Studio.
  • CMake Targets: Nu kan du fästa mål i CMake-målvy.
  • Connection Manager UX-: Användarupplevelsen ger en smidigare upplevelse när du ansluter till fjärrsystem. Mer information finns i Förbättringar av användbarhet i Visual Studio Connection Manager.
  • Kommentarer på pull-begäran: Nu kan du visa GitHub- och Azure DevOps-kommentarer direkt i din arbetsfil. Aktivera funktionsflaggan, kommentarer för pull-begäran i Alternativ>Miljö>Förhandsversionsfunktioner och checka ut pull-begäransgrenen för att börja.
  • AI-Generated Content: GitHub Copilot kan nu skapa beskrivningar av pull-begäranden. Kräver en aktiv GitHub Copilot-prenumeration. Prova det genom att klicka på ikonen Lägg till AI-genererad pull-begäransbeskrivning glitterpenna i fönstret Skapa en pull-begäran.
  • Image Preview: Hovra över en bild för att se en förhandsgranskning med storleksdetaljer. Storleken är begränsad till 500 px bred och hög.

    Skärmbild av hovringsförhandsgranskning.

    Musen hovrar över raden std::filesystem::path vs_logo_path = "../images/vs_logo.png". Under visas en förhandsgranskning av Visual Studio-logotypen och informationen om att den är 251 x 500 bildpunkter och 13,65 KB i storlek.

  • Skapande av brytpunkt/spårningspunkt: Du kan nu skapa villkorliga brytpunkter eller spårningspunkter direkt från uttryck i källkoden från högerklicksmenyn. Detta fungerar på egenskaps- eller fältnamn och värden från automatiska variabler, lokala variabler, övervakningsfönster eller DataTips.
  • Dialogrutan Koppla till process: Funktionerna i dialogrutan Bifoga till process är mer användarvänliga. Nu kan du enkelt växla mellan träd- och listvyer, organisera processer bättre med komprimerbara avsnitt och välja kodtyper med en förenklad kombinationsruta. Dessutom är funktionen "Välj/spåra fönster" nu enklare att använda, vilket möjliggör dubbelriktad spårning: om du väljer en process markeras dess fönster och klickar på ett fönster väljs processen.
  • GitHub Copilot Integration: GitHub Copilot- och Copilot Chat-tilläggen är nu enhetliga och levereras nu direkt i Visual Studio. Installera den genom att installera komponenten GitHub Copilot i Visual Studio Installer:

    Skärmbild av installationsalternativet GitHub Copilot för Visual Studio Installer.

    GitHub Copilot-gränssnittet finns i det övre högra hörnet i Visual Studio. Om du vill använda den behöver du en aktiv GitHub Copilot-prenumeration.

    Skärmbild av GitHub Copilot-knappen.

    GitHub Copilot-knappen visas i det övre högra hörnet i Visual Studio. Den har alternativ för att öppna ett chattfönster, GitHub Copilot-inställningar, lära dig mer och hantera copilot-prenumeration.

Nyheter för C++ i Visual Studio version 17.9

släpptes feb 2024

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.9
Standardbiblioteket (STL) sammanfogade C++23-funktioner, prestandaförbättringar, förbättrat beteende, LWG-problemlösningar och korrigerade buggar STL Ändringslogg 17.9
Nya funktioner i Visual Studio 17.9 IDE Visual Studio 2022 version 17.9 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.9 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022
Sammanfattning av C++-serverdelsuppdateringar MSVC-serverdelsuppdateringar sedan Visual Studio 2022 version 17.3

En partiell lista över nya funktioner:

  • #include diagnostik, som ger en detaljerad analys av dina #include-direktiv. Aktivera den här funktionen genom att högerklicka på en #include och välja #include direktiv>Aktivera #include direktivdiagnostik på. Ovanför varje #include är antalet gånger koden refererar till den #include filen. Klicka på länken referens för att navigera till den platsen där koden använder något från huvudfilen. För att visa byggtiden för dina #include-direktiv kör du Build Insights genom att navigera till Build>Kör Build Insights på lösningen>Build.

    Skärmdump av #include-diagnostik.

    Ovanför #-inkluderingen finns en **referens**-länk och många av referenserna till den här # include-filen (i det här fallet 1). Byggtiden visas också (i det här fallet mindre än 1/2 per sekund).

  • Visualisering av minneslayout som visar hur minnet arrangeras för dina klasser, strukturer och enheter. Hovra över en typ och välj länken Minneslayout i snabbinfo för att öppna ett dedikerat fönster som visar minneslayouten för den valda typen. Att hovra över enskilda datatyper i det här fönstret ger detaljerad information om deras storlek och förskjutning inom typen.

    Skärmbild av fönstret för minneslayout

    Fönstret för minneslayout visar innehållet i klassen Snake. Den visar minnesförskjutningar för de olika fälten i klassen, som punktklasserna för positionen av huvudet och kroppen, poängen och så vidare.

  • Nu kan du ange din egen anpassade CMake-exekverbar fil. Den här funktionen är användbar om du vill använda en specifik version av CMake som inte levereras med Visual Studio. Gå till Verktyg>Alternativ och välj CMake>Allmänt. Välj Aktivera anpassad CMake-körbarfil och definiera katalogsökvägen för din CMake-körbarfil.

    Skärmbild av CMake-alternativens dialogruta

    Dialogrutan CMake-alternativ med alternativet "Aktivera anpassad CMake-exekverbar" och fältet "CMake-exekverbarkatalog" som är markerat.

  • Förbättrad IntelliSense för Unreal Engine-projekt.
  • Förbättrat stöd för C++23: std::format och std::spanformattable, range_format, format_kindoch set_debug_format() som en del av P2286R8 formateringsintervall<mdspan> per P0009R18 och efterföljande formuleringsändringar som tillämpades på C++23 Standard. Dessutom kan format() formatera pekare per P2510R3.

Nyheter för C++ i Visual Studio version 17.8

släpptes nov 2023

För mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.8
Standardbiblioteket (STL) kombinerade C++26, C++23-funktioner och C++20-tillägg, lösningar på LWG-problem, prestandaförbättringar, förbättrat beteende och åtgärdade buggar STL Changelog 17.8
Nya funktioner i Visual Studio 17.8 IDE Visual Studio 2022 version 17.8 Versionsinformation
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.8 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022
En översikt över C++-förbättringar i Visual Studio, VS Code och vcpkg under 2023 Ett år med C++-förbättringar

En partiell lista över nya funktioner:

  • C++ strukturerad diagnostik i utdatafönstret och ett nytt probleminformationsfönster som ger mer information om felet. För mer information, se Structured SARIF Output och Problem Details Window.
  • En funktion som gör att du kan visualisera storleken och justeringen för dina klasser, structs, unioner, bastyper eller uppräkningar redan innan koden kompileras. Hovra över identifieraren och en snabbinformation visar information om storlek och justering.
  • En funktion som föreslår när medlemsfunktioner ska markeras const eftersom de inte ändrar objektets tillstånd. Hovra över en medlemsfunktion och klicka på glödlampaikonen för att markera funktionen som const.
  • Visual Studio uppmanar dig nu att markera globala funktioner som statiska via en skruvmejselikon som visas med funktionsnamnet. Klicka på skruvmejselikonen för att markera funktionen som statisk.
  • Oanvända #include direktiv är nedtonade i redigeraren. Du kan hovra över en nedtonad inkludering och använda glödlampemenyn för att antingen ta bort den inkluderingen eller alla oanvända inkluderingar. Du kan också lägga till #include direktiv för entiteter som indirekt ingår via andra rubriker. För mer information, se Rensa C/C++ inkluderar i Visual Studio.
  • Mer stöd för Unreal Engine:
    • Med Unreal Engine Test Adapter kan du identifiera, köra, hantera och felsöka dina Unreal Engine-tester utan att behöva lämna Visual Studio IDE.
    • Med Unreal Engine Code-kodfragment kan du hitta vanliga Unreal Engine-konstruktioner som kodfragment i din medlemslista.
    • Build Insights är nu integrerat med Visual Studio 2022 och fungerar med MSBuild- och CMake-projekt med MSVC. Nu kan du se ytterligare information om kompilering av en funktion, till exempel hur lång tid det tog att kompilera och antalet ForceInlines samt hur huvudfiler påverkar byggtiden. Mer information finns i Handledning: Felsöka funktionsinline vid byggtid och Handledning: Felsöka rubrikfilens inverkan på byggtid.
  • Nu kan du köra dina CTest- och GTest-tester på dina fjärranslutna Linux-datorer från Visual Studio Test Explorer, precis som dina lokala tester.

Nyheter för C++ i Visual Studio version 17.7

släpptes aug 2023

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.7
Nya C++-funktioner som är specifika för spelutveckling Frigöra kraften i Visual Studio 2022 för C++ Game Development
Standardbiblioteket (STL) integrerade C++23-funktioner, LWG-lösningar av problem, prestandaförbättringar, förbättrat beteende och åtgärdade buggar STL Changelog 17.7
Nya funktioner i Visual Studio 17.7 IDE Visual Studio 2022 version 17.7 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.7 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner:

  • Snabbare felsökningssessioner och snabbare inläsningstider för projekt
  • Stegvis visualisering av makroexpansion
  • Nedladdning med ett klick för Windows-undersystem för Linux (WSL)
  • Förbättrat stöd för Doxygen-kommentarer
  • C++ Build Insights för spelutveckling
  • Lade till /std:clatest för C-kompilatorn.
  • Unreal Engine-projektförbättringar som snabbare IntelliSense och syntaxfärgning, möjligheten att hitta alla Unreal Engine Blueprint-referenser med mera.

Nyheter för C++ i Visual Studio version 17.6

släpptes maj 2023

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.6
Standardbiblioteket (STL) inkluderade C++23-funktioner, lösningar på LWG-frågor, prestandaförbättringar, förbättrat beteende och åtgärdade buggar. STL Changelog 17.6
Nya funktioner i Visual Studio 17.6 IDE Visual Studio 2022 version 17.6 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.6 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner innehåller:

  • Felsökning av CMake-skript
  • Inbyggt stöd för HLSL (High Level Shading Language)
  • Loggvisare för Unreal Engine
  • VCPKG läggs nu till som standard
  • Initialt stöd för C++20 i C++/CLI-projekt och vissa C++23-standardbiblioteksfunktioner för intervall.

Nyheter för C++ i Visual Studio version 17.5

släpptes februari 2023

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.5
Standardbiblioteket (STL) införde C++23-funktioner, löste LWG-problem, förbättrade prestanda, förbättrade beteenden och åtgärdade buggar. STL Ändringslogg 17,5
Nya funktioner i Visual Studio 17.5 IDE Visual Studio 2022 version 17.5 Versionsinformation

En partiell lista över nya funktioner innehåller:

  • std::move, std::forward, std::move_if_noexceptoch std::forward_like producerar nu inte funktionsanrop i genererad kod, inte ens i felsökningsläge. Den här ändringen undviker namngivna casts som orsakar onödig överbelastning i felsökningskompileringar. /permissive- (eller ett alternativ som innebär det, till exempel /std:c++20 eller std:c++latest) krävs.

  • Lade till [[msvc::intrinsic]]. Du kan använda det här attributet för icke-återkommande funktioner som består av en enda gjutning, som bara tar en parameter.

  • Stöd har lagts till för Linux-konsolen i den integrerade terminalen, vilket möjliggör terminal-I/O.

  • Lade till initialt experimentellt stöd för C11 atomiska primitiver (<stdatomic.h>). Du kan aktivera den här experimentella funktionen med alternativet /experimental:c11atomics i /std:c11 läge eller senare.

  • Lade till en ny uppsättning experimentella kontroller med hög konfidens i Lifetime Checker för reducerat brus.

  • Med en ny förhandsgranskningsfunktion, Remote File Explorer, kan du visa filkatalogen på dina fjärrdatorer i VS och ladda upp och ladda ned filer till den.

  • Ändrad versionshantering av körbara CMake-filer som levereras med Visual Studio för att matcha Kitware-versioner.

  • Stöd för Hot Reload har lagts till i CMake-projektmallen.

  • Gå till Definition för C++ använder nu en mer subtil indikator på att åtgärden tar mer tid och ersätter den modala dialogrutan från tidigare versioner.

  • Började utrullningen av ett experiment som ger smartare resultat i C++-autokomplettering och medlemslistan. Den här funktionen kallades tidigare Predictive IntelliSense men använder nu en ny presentationsmetod.

  • Nu skickar vi en inbyggd Arm64 Clang-verktygsuppsättning med vår LLVM-arbetsbelastning, vilket tillåter intern kompilering på Arm64-datorer.

  • Lokalisering har lagts till i Image Watch-tillägget (det här tillägget är tillgängligt på Marketplace och paketeras inte via Visual Studio Installer).

  • Stöd har lagts till för att öppna ett terminalfönster i utvecklarcontainern som körs.

  • Gjorde flera förbättringar av IntelliSense-makroexpansionen. Framför allt har vi aktiverat rekursiv expansion i fler kontexter, och vi har lagt till alternativ i popupfönstret för att kopiera expansionen till urklipp eller expandera makrot infogat.

  • Samtidig övervakning stöds nu i serieövervakaren. Med samtidig övervakning kan du övervaka flera portar samtidigt sida vid sida. Tryck på plusknappen för att öppna en annan seriell övervakare och kom igång.

  • Nu kan du visa egenskaper från basklasser som ändrats i en Unreal Blueprint-tillgång utan att lämna Visual Studio. Dubbelklicka på en skissreferens för en C++-klass eller egenskap för att öppna UE Asset Inspector i Visual Studio.

  • Aktiverad körning av DevContainers på en fjärransluten Linux-dator.

  • Aktiverat val av flera mål som ska skapas i vyn CMake-mål.

  • Stöd har lagts till för CMakePresets.json version 5. Mer information om nya funktioner finns i CMake-dokumentationen.

  • Aktiverade Test Explorer för att skapa och testa flera CMake-mål parallellt.

  • Alternativet Öppna container i terminalen har lagts till i Dev Containers.

  • Implementerade standardbiblioteksfunktioner:

    • P2508R1basic_format_string, format_string, wformat_string
    • P2322R6ranges::fold_left, ranges::fold_rightoch så vidare.
    • P2321R2views::zip (inkluderar inte zip_transform, adjacentoch adjacent_transform)

Nyheter för C++ i Visual Studio version 17.4

släpptes nov 2022

Mer information om Se
Nyheter för C++-utvecklare Nyheter för C++-utvecklare i Visual Studio 2022 17.4
Standardbiblioteket (STL) införde C++23-funktioner, lösningar på LWG-frågor, prestandaförbättringar, förbättrat beteende och åtgärdade buggar. STL Ändringslogg 17.4
Nya funktioner i Visual Studio 17.4 IDE Visual Studio 2022 version 17.4 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.4 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner i 17.4:

  • Förbättrade kompilatorfelmeddelanden för att ge mer korrekt och användbar information, särskilt för begrepp.

  • Det experimentella MSVC-alternativet /experimental:log<directory> har lagts till för att skapa utdata av strukturerad SARIF-diagnostik i den angivna katalogen.

  • Stöd har lagts till för C23-attribut till IntelliSense och fortsatt förlopp i stöd för C++20-moduler.

  • Bättre indexeringsprestanda när du öppnar en ny lösning. Stora projekt kunde se en förbättring på 20–35% från 17,3.

  • Förbättrad Named Return Value Optimization (NRVO):

    • NRVO är aktiverat för ärenden som omfattar undantagshantering eller loopar.
    • NRVO aktiveras även under /Od om användaren godkänner alternativet /Zc:nrvo eller /std:c++20 eller senare, eller /permissive-.
    • Du kan nu inaktivera NRVO med alternativet /Zc:nrvo-.
  • Uppgraderade versionen av LLVM som levererades med Visual Studio till 15.0.1. Mer information om vad som är tillgängligt finns i versionsanteckningarna för LLVM och Clang.

  • Stöd har lagts till i Visual Studio för vcpkg-artefakter med CMake-projekt. För projekt som innehåller ett vcpkg-manifest aktiveras miljön automatiskt vid projektöppning. Läs mer om den här funktionen i aktiveringen av vcpkg-miljön i Visual Studio-blogginlägget.

  • Nu kan du använda Dev Containers för dina C++-projekt. Läs mer om den här funktionen i blogginlägget Dev Containers for C++.

  • IntelliSense respekterar nu ordningen av förinkluderade headrar när en av dem är en PCH. Tidigare, när en PCH användes via /Yu och tvingades inkluderas via /FI, skulle IntelliSense alltid bearbeta den först, innan andra huvudfiler som inkluderas via /FI. Det här beteendet matchade inte byggbeteendet. Med den här ändringen bearbetas /FI rubriker i den ordning de anges.

  • Tog bort interna prefix från CTest-namn i Test Explorer.

  • Uppdaterade versionen av CMake som levererades med Visual Studio till version 3.24.1. Mer information om vad som är tillgängligt finns i CMake-releasenoteringar.

  • Android SDK-uppdatering:

    • Ant-skript har tagits bort, så användarna ser inte längre Ant-baserade mallar i dialogrutan Nytt projekt. För att få hjälp med att migrera från Ant-mallar till Gradle-mallar, se Migrering av byggen från Apache Ant
    • Stöd har lagts till för att kunna bygga med NDK 23 och 24
    • NDK-komponenten har uppdaterats till LTS version 23
  • Vektoriserade implementeringar av ranges::min_element(), ranges::max_element()och ranges::minmax_element() har lagts till

  • Vi fortsätter att följa den senaste utvecklingen inom C++-standardisering. Stöd för dessa C++23-funktioner är tillgängligt genom att inkludera /std:c++latest i kompilatoralternativen:

    • P2302R4ranges::contains, ranges::contains_subrange

    • P2499R0string_view områdeskonstruktorn ska vara explicit

    • P0849R8auto(x): sönderfallskopia I språket

      (Kompilatordelen har inte implementerats än. Biblioteksdelen implementerades i C++20-läge när Stöd för intervall ursprungligen implementerades.)

    • P0881R7<stacktrace>

    • P2301R1 Lägga till ett pmr alias för std::stacktrace

    • P1328R1constexpr type_info::operator==()

    • P2440R1ranges::iota, ranges::shift_left, ranges::shift_right

    • P2441R2views::join_with

  • Ett alternativ har lagts till "Navigering efter Skapa deklaration/definition" så att du kan välja navigeringsbeteendet för funktionen Skapa deklaration/definition. Du kan välja mellan att granska (standard) eller öppna dokumentet eller att inte navigera.

  • Arm64-versioner av Visual Studio paketerar nu Arm64-versioner av CMake och Ninja.

  • Stöd har lagts till för CMake Presets version 4. Mer information om vad som är tillgängligt finns i CMake-utgåvemeddelanden.

  • Fjärrsystemanslutningar med Connection Manager stöder nu SSH ProxyJump. ProxyJump används för att komma åt en SSH-värd via en annan SSH-värd (till exempel för att komma åt en värd bakom en brandvägg).

Nyheter för C++ i Visual Studio version 17.3

släpptes aug 2022

Mer information om Se
Nyheter för C++-utvecklare C++-förbättringar i 17.3
Standardbiblioteket (STL) integrerade C++23-funktioner, LWG-ärendelösningar, prestandaförbättringar, förbättrat beteende och buggar åtgärdades STL Changelog 17.3
Nya funktioner i Visual Studio 17.3 IDE Visual Studio 2022 version 17.3 Versionsanteckningar
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.3 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner i 17.3:

  • Arm64EC-verktygskedjan är inte längre markerad som experimentell och är redo för produktionsanvändning.
  • Visual Studio-terminalen kan nu användas som en SSH-klient med dina lagrade SSH-anslutningar. Öppna fönstret Terminal-verktyg med C++ för Linux-verktyg installerat. Listrutan Terminal fylls i med dina lagrade anslutningar. När du väljer en anslutning öppnas ett nytt terminalfönster i Visual Studio som visar en pseudoterminal i fjärrsystemet. Kontrolltecken, färger och markörpositionsmedvetenhet stöds.
  • Visual Studio kan nu lägga till Unreal Engine-klassmallar för dina UE-projekt. Om du vill prova den här funktionen kontrollerar du att IDE-stöd för Unreal Engine har valts i Game-utveckling med C++ arbetsbelastning i Visual Studio Installer. När du arbetar med ett UE-projekt högerklickar du i projektet eller en mapp/filter och väljer Lägg till>UE-klass.
  • Gå till Definition nu kommer ihåg den tidigare signaturen och navigerar därefter när en bättre matchning inte är tillgänglig (till exempel när du har ändrat signaturen för ett av paret manuellt). Svarstiden för Gå till alla har förbättrats. Tidigare visades resultaten när du slutade skriva. I den nya upplevelsen visas resultaten när du skriver.
  • I kontexter som kräver enum typkomplettering (till exempel tilldelningar till enum variabler, case-etiketter, returnering av enum-typ osv.) filtreras listan över automatisk komplettering nu till endast matchande uppräknare och andra relaterade konstruktioner.
  • NuGet PackageReference-stöd har lagts till för C++/CLI MSBuild-projekt som riktar sig till .NET Core. Den här ändringen gjordes för att avblockera blandade kodbaser från att kunna använda .NET Core. Det här stödet fungerar inte för andra C++-projekttyper eller C++-projekttyper som riktar sig till .NET Framework. Det finns inga planer på att utöka PackageReference-stödet till andra C++-scenarier. Teamet arbetar med separata upplevelser som involverar vcpkg för scenarier som inte är MSBuild och för att lägga till fler funktioner.
  • Ett serieövervakningsfönster har lagts till för inbyggd utveckling, tillgängligt genom Debug>Windows>Serial Monitor.
  • Förbättrad C++-indexering med ~66% jämfört med 17,2.
  • Uppdaterade versionen av CMake som levererades med Visual Studio till version 3.23. Mer information om vad som är tillgängligt finns i CMake 3.23-releasenoteringar för detaljer.
  • Uppgraderade versionerna av LLVM-verktyg som levererades med Visual Studio till v14. För mer information om vad som är tillgängligt, se LLVM- och Clang versionsinformation.
  • Uppdaterade den parallella Dev 16.11 C++ Toolset till version 14.29.30145.00. Den senaste versionen av Dev 16.11 C++ Toolset innehåller viktiga felkorrigeringar, inklusive att åtgärda alla återstående C++20-defektrapporter. Mer information om buggfixar, inklusive C++20-felrapporter i Dev 16.11, finns i Visual Studio 2019 version 16.11.14 versionsinformation.
  • Gjorde olika förbättringar av redigeringsupplevelsen för C++-moduler. Vi arbetar kontinuerligt med att förbättra kvaliteten på upplevelsen men uppmuntrar dig att prova dem i 17.3. Rapportera återstående problem via Developer Community.

Nyheter för C++ i Visual Studio version 17.2

släpptes maj 2022

Mer information om Se
Nyheter för C++-utvecklare Visual Studio 2022 17.2 är nu tillgänglig
Standardbiblioteket (STL) sammanfogade C++20-felaktighetsrapporter, C++23-funktioner, LWG-problemlösningar, prestandaförbättringar, förbättrat beteende och åtgärdade buggar STL Ändringslogg 17.2
Nya funktioner i Visual Studio 17.2 IDE Visual Studio 2022 version 17.2 Versionsinformation
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.2 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner i 17.2:

  • Kompilatorstöd har lagts till för funktionen C++23 att härleda this, som är tillgängligt under alternativet /std:c++latest.
  • IntelliSense-stöd har lagts till för C++23-funktioner att härleda this och if consteval.
  • Infogat parameternamn och stöd för typtips har lagts till genom att trycka på Alt+F1 eller dubbeltrycka Ctrl. Det här beteendet kan anpassas under Verktyg > Alternativ > textredigerare > C/C++ > IntelliSense.
  • Lade till experimentellt stöd för C++20-moduler i CMake-projekt. Det här stödet är för närvarande endast tillgängligt med Visual Studio-generatorn (MSBuild).
  • I 17.1 introducerade vi kringutrustningsregister och RTOS-vyer för inbäddade utvecklare. Vi fortsätter att förbättra funktionerna i dessa vyer med användbarhetsförbättringar i 17.2:
    • RTOS-verktygsfönstret är nu dolt som standard. Det förhindrar att ett verktygsfönster visas med felmeddelanden som inte är relevanta när du inte använder en RTOS.
    • När du dubbelklickar på ett RTOS-objekt i verktygsfönstret lägger det till en klocka för objektet.
    • När du väljer start- och slutvärdena för stackpekaren i RTOS-verktygsfönstret öppnas den i minnesfönstret.
    • Trådmedvetenhet har lagts till för enhetsmål i anropsstackfönstret.
    • Användare kan nu välja en fästikon bredvid kringutrustning, register eller fält för att fästa dem överst i kringutrustningsvyn.
  • Implementeringar av återstående C++20-felrapporter har lagts till (kallas även backports). Alla C++20-funktioner är nu tillgängliga under alternativet /std:c++20. Mer information om de implementerade backportarna finns i VS 2022 Changelog på Microsoft/STL GitHub-lagringsplatsen och blogginlägget MSVC:s STL Completes /std:c++20.
  • Vi har lagt till olika C++23-biblioteksfunktioner som är tillgängliga under alternativet /std:c++latest. Mer information om de nya funktionerna finns i STL Repo changelog.
  • Förbättrad prestanda för den inledande C++-indexeringen med upp till 20%, beroende på djupet i inkluderingsdiagrammet.

Nyheter för C++ i Visual Studio version 17.1

släpptes februari 2022

Mer information om Se
Nyheter för C++-utvecklare Visual Studio 2022 17.1 är nu tillgänglig!
Standardbiblioteket (STL) integrerade C++23-funktioner, lösningar på LWG-ärenden, prestandaförbättringar, förbättrat beteende och rättade buggar. STL Changelog 17.1
Nya funktioner i Visual Studio 17.1 IDE Visual Studio 2022 version 17.1 Versionsinformation
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.1 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022

En partiell lista över nya funktioner i 17.1:

  • En ny Konfigurera förinställd-mall läggs till för att konfigurera och skapa CMake-projekt på ett fjärranslutet macOS-system med CMakePresets.json. Du kan också starta CMake-mål på ett macOS-fjärrsystem och sedan felsöka via fjärranslutning i Visual Studio-felsökningsprogrammet som backas upp av GDB eller LLDB.
  • Nu kan du felsöka kärndumpar på ett macOS-fjärrsystem från Visual Studio med LLDB eller GDB.
  • Versionerna av Clang och LLVM som levereras med Visual Studio uppgraderas till v13.
  • Visual Studio's CMake-integrering är bara aktiv när en CMakeLists.txt identifieras i roten av den öppna arbetsytan. Om en CMakeLists.txt identifieras på en annan nivå på arbetsytan uppmanas du att aktivera Visual Studio CMake-integrering med ett meddelande.
  • Nya vyer som gör att du kan inspektera och interagera med kringutrustningsregister på objekt för mikrostyrenheter och realtidsoperativsystem (RTOS), tillgängliga via Felsökning>Windows>Embedded-register
  • Lade till en ny trådvy för RTOS-projekt, tillgänglig via Felsökning>Windows>RTOS-objekt. Mer information finns i Embedded Software Development i Visual Studio.

Nyheter för C++ i Visual Studio version 17.0

släpptes nov 2021

Mer information om Se
Nya funktioner i Visual Studio 17.0 IDE Visual Studio 2022 version 17.0 Versionsinformation
Standardbiblioteket (STL) sammanslog C++23- och C++26-funktioner, C++20-defektrapporter, LWG-problemlösningar, prestandaförbättringar, förbättrat beteende och korrigerade buggar STL Changelog 17.0
Förbättringar av språkefterlevnad i C++ i Visual Studio 2022 17.0 förbättringar av C++-överensstämmelse, beteendeändringar och felkorrigeringar i Visual Studio 2022 17.10

En översikt över några av de nya funktionerna i Visual Studio 2022 version 17.0:

  • Visual Studio IDE, devenv.exe, är nu ett internt 64-bitarsprogram.
  • MSVC-verktygsuppsättningen använder nu som standard SHA-256-källhashning i felsökningsposter. Tidigare använde verktygsuppsättningen MD5 för källhashning som standard.
  • V143-byggverktygen är nu tillgängliga via Installationsprogrammet för Visual Studio och i fristående byggverktyg.

Direkt omladdning för native C++

  • Hot Reload för C++ gör det möjligt att utföra många typer av kodredigeringar på din körande app och tillämpa dem utan att behöva pausa appens körning med till exempel en brytpunkt.

När du startar appen i felsökningsprogrammet i Visual Studio 2022 kan du använda knappen Frekvent omläsning för att ändra programmet medan det fortfarande körs. Den här funktionen drivs av den inbyggda Edit and Continue-funktionen. Mer information om redigeringar som stöds finns i Redigera och fortsätt (C++).

  • Hot Reload stöder CMake- och Open Folder-projekt.

WSL2-stöd

  • Nu kan du skapa och felsöka internt på WSL2 utan att upprätta en SSH-anslutning. Både plattformsoberoende CMake-projekt och MSBuild-baserade Linux-projekt stöds.

Förbättrat CMake-stöd

  • Uppgraderade versionen av CMake som levererades med Visual Studio till version 3.21. För mer information om vad som finns tillgängligt i den här versionen, se CMake 3.21 utgivningsanteckningar.

  • CMake-översiktssidor har uppdaterats för att stödja CMakePresets.json.

  • Nu kan du konfigurera och skapa dina CMake-projekt med CMake 3.21 och CMakePresets.json v3.

  • Visual Studio stöder nu alternativet buildPresets.targets i CMakePresets.json. Med det här alternativet kan du skapa en delmängd av mål i ditt CMake-projekt.

  • Projektmenyn i CMake-projekt är strömlinjeformad och visar alternativ för "Ta bort cache och konfigurera om" och "Visa cache".

  • Implementerade kompilatoralternativet /scanDependencies för att lista C++20-modulberoenden för CMake-projekt enligt beskrivningen i P1689R5. Det är ett steg mot stöd för att skapa modulbaserade projekt med CMake och vi arbetar med att slutföra det här stödet i senare versioner.

Standardbiblioteksförbättringar

Välj förbättringar i Standardbiblioteket (STL) som markeras här. En omfattande lista över nya funktioner, ändringar, felkorrigeringar och prestandaförbättringar finns i STL-teamets Changelog.

  • Felsökningsvisualiserare har lagts till för att förbättra hur följande typer visas: source_location, bind_front(), u8string (och dess iteratorer), default_sentinel_t, unreachable_sentinel_t, ranges::empty_view, ranges::single_view, ranges::iota_view (och dess iterator/sentinel), ranges::ref_view, thread, thread::id, jthreadoch filesystem::path
  • [[nodiscard]] har lagts till i stoi()-serien med funktioner i <string> samt till olika funktioner av <locale>, inklusive collate:s medlemsfunktioner, has_facet()samt isalnum()- och tolower()-familjerna.
  • P0980R1 Gjord std::stringconstexpr i VS 2019 16.10. Stöds nu för Clang.
  • P1004R2 Gjort std::vectorconstexpr i VS 2019 16.10. Stöds nu för Clang.

Höjdpunkter C++23-funktioner

  • P1048R1 Lade till is_scoped_enum, ett nytt drag för C++ Standard-biblioteket, som identifierar om en typ är en begränsad uppräkning.
  • P1132R7out_ptr(), inout_ptr()
  • P1679R3contains() För basic_string och basic_string_view
  • P1682R3to_underlying() för uppräkningar
  • P2162R2 Tillåt ärvning från std::variant
  • P2166R1 Förhindra konstruktion av basic_string och basic_string_view från nullptr. Den här ändringen är en ändring som ändrar källan på ett genomgripande sätt. Kod som tidigare hade odefinierat beteende vid körning avvisas nu med kompilatorfel.
  • P2186R2 Stöd för skräpinsamling har tagits bort. Den här ändringen tar bort declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. Tidigare hade dessa funktioner ingen effekt.

Framhävda prestandaförbättringar

  • Nu identifierar <format> när det skrivs till en back_insert_iterator för en basic_string eller en vector, och gör ett snabbare anrop till insert() vid containerns end().
  • Vi förbättrade prestandan för std::find() och std::count() för vector<bool> 19x och 26x (gånger, inte procent).
  • Vi förbättrade prestandan hos std::count() med avseende på vector<bool>
  • std::byte har nu samma prestanda som unsigned char i reverse() och variant::swap()

Stöd för Clang och LLVM

  • LLVM-verktyg som levereras med Visual Studio uppgraderas till LLVM 12. För mer information, se de LLVM-versionsanteckningar.

  • Clang-cl-stödet uppdaterades till LLVM 12.

  • Nu kan du felsöka processer som körs på ett fjärrsystem från Visual Studio med hjälp av LLDB.

C++ AMP föråldrad

  • C++ AMP-huvuden är nu inaktuella. Om du inkluderar <amp.h> i ett C++-projekt genereras byggfel. Om du vill tysta felen definierar du _SILENCE_AMP_DEPRECATION_WARNINGS. Mer information finns i våra AMP-utfasningslänkar.

Förbättringar av IntelliSense

  • Vi har gjort förbättringar i C++ IntelliSense när vi tillhandahåller navigering och syntaxmarkering för typer från importerade moduler och rubrikenheter. IntelliSense är ett aktivt investeringsområde för oss. Hjälp oss att förbättra: Dela din feedback om utvecklarcommunityn med hjälp av Hjälp>Skicka feedback.
  • Vi har förbättrat C++ IntelliSense-prestanda genom att optimera cachelagrad sidhuvudanvändning och åtkomst till symboldatabasen, vilket ger bättre inläsningstider för att komma in i koden.
  • IntelliSense Code Linter för C++ är nu aktiverat som standard, vilket ger omedelbara förslag som du skriver och åtgärdar förslag på vanliga kodfel.
  • C++ IntelliSense för CMake-projekt fungerar nu när du använder en förinställning med ett visningsnamn.

C++ Arbetsbelastningsuppdateringar

  • Uppdaterad till NDK r21 LTS i arbetsytan C++ Mobile Development.
  • Arbetsflödet Spelutveckling med C++ installerar nu den senaste versionen av Unreal Engine med stöd för Visual Studio 2022.

Förbättringar av kodanalys

  • Kodanalysen framtvingar nu att returvärden för funktioner som kommenterats med _Check_return_ eller _Must_inspect_result_ måste kontrolleras.
  • Identifiering av null-pekaravreferens har förbättrats i kodanalysverktyget.
  • Stöd för gsl::not_null för kodanalys har lagts till.
  • Stöd för Libfuzzer under kompilatoralternativet /fsanitize=fuzzer.

Viktig information för äldre versioner

Versionsinformation för äldre C++-versioner är också tillgänglig.

Kända problemområden

C++ IntelliSense

Mer information om andra öppna problem och tillgängliga lösningar för C++ i Visual Studio 2022 finns i problemlistan för C++ Developer Community .

Feedback och förslag

Vi vill gärna höra från dig. Du kan Rapportera ett problem eller Föreslå en funktion med hjälp av ikonen Skicka feedback i det övre högra hörnet i installationsprogrammet eller Visual Studio IDE eller från Hjälp>Skicka feedback. Du kan spåra dina problem med hjälp av Visual Studio Developer Community, där du lägger till kommentarer eller hittar lösningar. Du kan också få kostnadsfri installationshjälp via vår Live Chat-support.

Bloggar

Dra nytta av de insikter och rekommendationer som finns i Microsoft Developer Blogs webbplats för att hålla dig uppdaterad om alla nya versioner. Bloggarna innehåller djupgående inlägg om ett brett utbud av funktioner. C++ Team Blog och Visual Studio Blog är av särskilt intresse.