Novità di C++ in Visual Studio 2022

Visual Studio 2022 offre numerosi aggiornamenti e correzioni al compilatore e agli strumenti di Microsoft C++. L'IDE di Visual Studio offre anche miglioramenti significativi delle prestazioni e della produttività e ora viene eseguito in modo nativo come applicazione a 64 bit.

Novità di C++ in Visual Studio versione 17.9

Brevemente, alcune delle nuove funzionalità sono:

  • #include diagnostica, che fornisce un'analisi dettagliata delle #include direttive. Attivare questa funzionalità facendo clic con il pulsante destro del mouse su un e #include scegliendo #include direttive>Attiva diagnostica direttiva #include. Sopra ogni #include è il numero di volte in cui il codice fa riferimento a tale #include file. Fare clic sul collegamento di riferimento per passare alla posizione in cui il codice usa un elemento del file di intestazione. Per visualizzare il tempo di compilazione delle #include direttive, eseguire Build Insights passando a Build Run Build Insights on Solution Build Build Insights (Compila>informazioni dettagliate compilazione nella compilazione della soluzione).>

    Screenshot of #include diagnostics

    Sopra il file # include è un collegamento **reference** e un numero di riferimenti a questo file di inclusione # (in questo caso 1). Viene elencato anche il tempo di compilazione (in questo caso inferiore a 1/2 secondi).

  • Visualizzazione del layout di memoria, che mostra come viene disposta la memoria per le classi, gli struct e le unioni. Passare il puntatore del mouse su un tipo e scegliere il collegamento Layout memoria in Informazioni rapide per aprire una finestra dedicata che visualizza il layout di memoria del tipo selezionato. Passando il puntatore del mouse sui singoli tipi di dati all'interno di questa finestra, vengono fornite informazioni dettagliate sulle dimensioni e l'offset all'interno del tipo.

    Screenshot of the memory layout window

    La finestra del layout di memoria mostra il contenuto della classe Snake. Mostra gli offset di memoria dei vari campi della classe, ad esempio le classi Point per la posizione della testa e del corpo, il punteggio e così via.

  • È ora possibile specificare il proprio eseguibile CMake personalizzato. Questa funzionalità è utile se si vuole usare una versione specifica di CMake non fornita con Visual Studio. Passare a Opzioni strumenti>e selezionare CMake General (Generale CMake).> Selezionare Abilita eseguibile CMake personalizzato e specificare il percorso della directory dell'eseguibile CMake.

    Screenshot of the CMake options dialog

    La finestra di dialogo Opzioni CMake con l'opzione "Abilita eseguibile CMake personalizzato" e il campo "Directory eseguibile CMake" evidenziato.

  • IntelliSense migliorato per i progetti unreal Engine.
  • Miglioramento del supporto di C++23: std::format eformattablestd::span , range_format, format_kinde set_debug_format() come parte di P2286R8 Intervalli<mdspan> di formattazione per P0009R18 e modifiche successive di formulazione applicate allo standard C++23. Inoltre, format() può formattare i puntatori per P2510R3.

Per un riepilogo degli aggiornamenti back-end C++, vedere Aggiornamenti back-end MSVC a partire da Visual Studio 2022 versione 17.3.

Per un riepilogo delle nuove funzionalità nell'IDE di Visual Studio 17.9, vedere Note sulla versione di Visual Studio 2022 versione 17.9.

Novità di C++ in Visual Studio versione 17.8

Brevemente, alcune delle nuove funzionalità sono:

  • Diagnostica strutturata C++ nella finestra Output e una nuova finestra dei dettagli del problema che fornisce altre informazioni sull'errore. Per altre informazioni, vedere Structured SARIF Output and Problem Details Window .For more information, see Structured SARIF Output and Problem Details Window.
  • Funzionalità che consente di visualizzare le dimensioni e l'allineamento delle classi, degli struct, delle unioni, dei tipi di base o delle enumerazioni anche prima della compilazione del codice. Passare il puntatore del mouse sull'identificatore e visualizzare le informazioni sulle dimensioni e sull'allineamento.
  • Funzionalità che suggerisce quando contrassegnare le funzioni const membro perché non modificano lo stato dell'oggetto. Passare il puntatore del mouse su una funzione membro e fare clic sull'icona della lampadina per contrassegnare la funzione come const.
  • Visual Studio richiede ora di contrassegnare le funzioni globali come statiche tramite un'icona del cacciavite visualizzata dal nome della funzione. Fare clic sull'icona del cacciavite per contrassegnare la funzione come statica.
  • Le direttive #include inutilizzate vengono disattivate nell'editor. È possibile passare il puntatore del mouse su un oggetto dimmed include e usare il menu lampadina per rimuovere che includono o tutte le inclusioni inutilizzate. È anche possibile aggiungere #include direttive per le entità incluse indirettamente tramite altre intestazioni. Per altre informazioni, vedere Pulire C/C++ include in Visual Studio.
  • Supporto di un motore Unreal:
    • Unreal Engine Test Adapter consente di individuare, eseguire, gestire ed eseguire il debug dei test del motore Unreal senza uscire dall'IDE di Visual Studio.
    • Con i frammenti di codice di Unreal Engine è possibile trovare costrutti unreal engine comuni come frammenti di codice nell'elenco dei membri.
    • Build Insights è ora integrato con Visual Studio 2022 e funziona con progetti MSBuild e CMake usando MSVC. È ora possibile visualizzare informazioni aggiuntive sulla compilazione di una funzione, ad esempio il tempo necessario per la compilazione e il numero di ForceInlines.
  • Il supporto di unit test di Linux remoti consente ora di eseguire i test CTest e GTest nei computer Linux remoti da Esplora test di Visual Studio, proprio come i test locali.

Per un riepilogo completo delle nuove funzionalità di C++ in Visual Studio 17.8, vedere Novità per sviluppatori C++ in Visual Studio 2022 17.8.

Per un riepilogo delle nuove funzionalità nell'IDE di Visual Studio 17.8, vedere Note sulla versione di Visual Studio 2022 versione 17.8.

Novità di C++ in Visual Studio versione 17.7

Per un riepilogo delle nuove funzionalità di C++ in Visual Studio 17.7, vedere Novità per sviluppatori C++ in Visual Studio 2022 17.7.

Brevemente, alcune delle nuove funzionalità sono:

  • Sessioni di debug più veloci e tempi di caricamento del progetto più veloci
  • Visualizzazione dettagliata dell'espansione di macro
  • Download con un clic per sottosistema Windows per Linux (WSL)
  • Supporto migliorato per i commenti Doxygen
  • C++ Build Insights for game development (Informazioni dettagliate sulla compilazione di C++ per lo sviluppo di giochi)
  • Aggiunta /std:clatest per il compilatore C.
  • Miglioramenti del progetto Unreal Engine, ad esempio intelliSense più veloce e colorazione della sintassi, la possibilità di trovare tutti i riferimenti a Progetto motore Unreal e altro ancora.

Per un riepilogo delle nuove funzionalità C++ specifiche per lo sviluppo di giochi, vedere Unleashing the Power of Visual Studio 2022 for C++ Game Development (Scatenamento della potenza di Visual Studio 2022 per lo sviluppo di giochi C++)

Per un riepilogo delle nuove funzionalità nell'IDE di Visual Studio 17.7, vedere Note sulla versione di Visual Studio 2022 versione 17.7.

Novità di C++ in Visual Studio versione 17.6

Per un riepilogo delle nuove funzionalità di C++ in Visual Studio 17.6, vedere Novità per gli sviluppatori C++ in Visual Studio 2022 17.6.

Brevemente, alcune delle nuove funzionalità sono: debug di script CMake, supporto predefinito per il linguaggio HLSL (High Level Shading Language), un visualizzatore log del motore Unreal, il supporto iniziale per C++20 nei progetti C++/CLI, VCPKG è ora aggiunto per impostazione predefinita e alcune funzionalità della libreria standard C++23 per gli intervalli. Per visualizzare un elenco completo delle nuove funzionalità aggiunte alla libreria standard, vedere il log delle modifiche STL.

Per un riepilogo delle nuove funzionalità nell'IDE di Visual Studio 17.6, vedere Note sulla versione di Visual Studio 2022 versione 17.6.

Novità di C++ in Visual Studio versione 17.5

Per un riepilogo delle nuove funzionalità di C++ in Visual Studio nella versione 17.5, vedere Novità per sviluppatori C++ in Visual Studio 2022 17.5. Per un riepilogo delle nuove funzionalità e delle correzioni di bug nell'IDE di Visual Studio versione 17.5, vedere Note sulla versione di Visual Studio 2022 versione 17.5.

  • std::move, std::forward, std::move_if_noexcepte std::forward_like ora non producono chiamate di funzione nel codice generato, anche in modalità di debug. Questa modifica evita i cast denominati che causano un sovraccarico non necessario nelle compilazioni di debug. /permissive- (o un'opzione che la implica, ad esempio /std:c++20 o std:c++latest) è obbligatoria.

  • Aggiunta [[msvc::intrinsic]] per supportare l'elemento precedente. È possibile applicare questo attributo a funzioni non ricorsive costituite da un singolo cast, che accetta un solo parametro.

  • Aggiunta del supporto per la console Linux nel terminale integrato, che consente l'I/O del terminale.

  • Aggiunta del supporto sperimentale iniziale per le primitive atomiche C11 (<stdatomic.h>). È possibile abilitare questa funzionalità sperimentale con l'opzione /experimental:c11atomics in /std:c11 modalità o versione successiva.

  • È stato aggiunto un nuovo set di controlli sperimentali ad alta confidenza al controllo della durata per ridurre il rumore.

  • Una nuova funzionalità di anteprima, Remote Esplora file, consente di visualizzare la directory dei file nei computer remoti all'interno di Visual Studio e di caricare e scaricare i file.

  • Modifica del controllo delle versioni degli eseguibili CMake forniti con Visual Studio in modo che corrispondano alle versioni di Kitware.

  • Aggiunta del supporto per Ricaricamento rapido al modello di progetto CMake.

  • Vai a definizione per C++ ora usa un indicatore più sottile dell'operazione che richiede più tempo, sostituendo il dialogo modale delle versioni precedenti.

  • È stata avviata l'implementazione di un esperimento che offre risultati più intelligenti nell'elenco di membri e completamento automatico C++. Questa funzionalità era precedentemente nota come IntelliSense predittiva, ma ora usa un nuovo metodo di presentazione.

  • Viene ora fornito un set di strumenti Clang Arm64 nativo con il carico di lavoro LLVM, consentendo la compilazione nativa nei computer Arm64.

  • Aggiunta della localizzazione all'estensione Image Watch (questa estensione è disponibile nel Marketplace e non è in bundle tramite il Programma di installazione di Visual Studio).

  • Aggiunta del supporto per l'apertura di una finestra del terminale nel contenitore per sviluppatori attualmente in esecuzione.

  • Sono stati apportati diversi miglioramenti all'espansione di macro IntelliSense. In particolare, è stata abilitata l'espansione ricorsiva in più contesti e sono state aggiunte opzioni al popup per copiare l'espansione negli Appunti o espandere la macro inline.

  • Il monitoraggio simultaneo è ora supportato in Monitoraggio seriale. Il monitoraggio simultaneo consente di monitorare più porte contemporaneamente. Premere il pulsante più per aprire un altro monitoraggio seriale e iniziare.

  • È ora possibile visualizzare le proprietà dalle classi di base modificate in un asset unreal Blueprint senza uscire da Visual Studio. Fare doppio clic in un riferimento progetto per una classe o una proprietà C++ per aprire Ue Asset Inspector in Visual Studio.

  • Abilitazione dell'esecuzione di DevContainers in un computer Linux remoto.

  • È stata abilitata la selezione di più destinazioni da compilare nella visualizzazione Destinazioni CMake.

  • Aggiunta del supporto per CMakePresets.json versione 5. Per informazioni sulle nuove funzionalità, vedere la documentazione di CMake.

  • Abilitazione di Esplora test per compilare e testare più destinazioni CMake in parallelo.

  • Aggiunta dell'opzione "Apri contenitore nel terminale" a Contenitori di sviluppo.

  • Implementazione delle funzionalità della libreria standard:

    • basic_format_stringP2508R1, format_string,wformat_string
    • ranges::fold_leftP2322R6, ranges::fold_righte così via.
    • views::zip P2321R2 (non include zip_transform, adjacente adjacent_transform)

Novità di C++ in Visual Studio versione 17.4

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio nella versione 17.4, vedere Note sulla versione di Visual Studio 2022 versione 17.4 e Novità per gli sviluppatori C++ in Visual Studio 2022 17.4.

  • Sono stati migliorati i messaggi di errore del compilatore per fornire informazioni più corrette e utili, in particolare per i concetti.

  • Aggiunta dell'opzione sperimentale MSVC per l'output /experimental:log<directory>della diagnostica SARIF strutturata nella directory specificata.

  • Aggiunta del supporto per gli attributi C23 a IntelliSense e avanzamento continuo nel supporto dei moduli C++20.

  • Miglioramento delle prestazioni di indicizzazione all'apertura di una nuova soluzione. I progetti di grandi dimensioni potrebbero vedere un miglioramento del 20-35% rispetto al 17,3.

  • Miglioramento dell'ottimizzazione dei valori restituiti denominati (NRVO):

    • NrVO è abilitato per i casi che comportano la gestione delle eccezioni o i cicli.
    • NrVO è abilitato anche in /Od se l'utente passa l'opzione /Zc:nrvo o /std:c++20 versione successiva o /permissive-.
    • È ora possibile disabilitare NRVO con l'opzione /Zc:nrvo- .
  • Aggiornata la versione di LLVM fornita con Visual Studio alla versione 15.0.1. Per altre informazioni su ciò che è disponibile, vedere le note sulla versione di LLVM e Clang .

  • Aggiunta del supporto a Visual Studio per artefatti vcpkg con progetti CMake. Per i progetti che includono un manifesto vcpkg, l'ambiente viene attivato automaticamente all'apertura del progetto. Altre informazioni su questa funzionalità sono disponibili nel post di blog relativo all'attivazione dell'ambiente vcpkg in Visual Studio .

  • È ora possibile usare i contenitori di sviluppo per i progetti C++. Altre informazioni su questa funzionalità sono disponibili nel post di blog Dev Containers for C++ (Contenitori di sviluppo per C++ ).

  • IntelliSense ora rispetta l'ordine delle intestazioni precluse quando uno di essi è un PCH. In precedenza, quando un PCH veniva usato tramite /Yu e incluso forzatamente tramite /FI, IntelliSense lo elaborava sempre prima, prima di qualsiasi altra intestazione inclusa tramite /FI. Questo comportamento non corrisponde al comportamento di compilazione. Con questa modifica, /FI le intestazioni vengono elaborate nell'ordine in cui vengono specificate.

  • Rimozione dei prefissi interni dai nomi CTest in Esplora test.

  • Aggiornamento della versione di CMake fornita con Visual Studio alla versione 3.24.1. Per informazioni dettagliate su ciò che è disponibile, vedere le note sulla versione di CMake.

  • Aggiornamento di Android SDK:

    • Gli script Ant sono stati rimossi, quindi gli utenti non visualizzano più modelli basati su Ant nella finestra di dialogo Nuovo progetto. Per informazioni sulla migrazione da modelli Ant a modelli Gradle, vedere Migrazione di compilazioni da Apache Ant
    • Aggiunta del supporto per la compilazione con NDK 23 e 24
    • Aggiornamento del componente NDK alla versione LTS 23
  • Aggiunta di implementazioni vettorializzate di ranges::min_element(), ranges::max_element()e ranges::minmax_element()

  • Continuiamo a tenere traccia degli ultimi sviluppi della standardizzazione C++. Il supporto per queste funzionalità di C++23 è disponibile includendo /std:c++latest nelle opzioni del compilatore:

    • ranges::containsP2302R4,ranges::contains_subrange

    • string_view P2499R0 costruttore di intervalli deve essereexplicit

    • auto(x)P0849R8: decadimento nella lingua

      La parte del compilatore non è ancora implementata. La parte della libreria è stata implementata in modalità C++20 quando è stato implementato inizialmente il supporto degli intervalli.

    • P0881R7<stacktrace>

    • P2301R1 aggiungere un pmr alias perstd::stacktrace

    • P1328R1constexpr type_info::operator==()

    • ranges::iotaP2440R1, ranges::shift_left,ranges::shift_right

    • P2441R2views::join_with

  • Aggiunta di un'opzione "Navigazione dopo la creazione di dichiarazione/definizione" per consentire di scegliere il comportamento di spostamento della funzionalità Crea dichiarazione/definizione. È possibile scegliere tra la visualizzazione (impostazione predefinita) o l'apertura del documento o nessuna navigazione.

  • Le build arm64 di Visual Studio ora raggruppano le versioni arm64 di CMake e Ninja.

  • Aggiunta del supporto per I set di impostazioni di CMake versione 4. Per informazioni dettagliate su ciò che è disponibile, vedere le note sulla versione di CMake.

  • Le connessioni di sistema remote che usano il Gestione connessioni ora supportano proxy SSHJump. ProxyJump viene usato per accedere a un host SSH tramite un altro host SSH, ad esempio per accedere a un host dietro un firewall.

Novità di C++ in Visual Studio versione 17.3

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio nella versione 17.3, vedere Note sulla versione di Visual Studio 2022 versione 17.3 e miglioramenti di C++.

  • La toolchain Arm64EC non è più contrassegnata come sperimentale ed è pronta per l'uso in produzione.

  • Il terminale di Visual Studio può ora essere usato come client SSH con le connessioni SSH archiviate. Dopo aver installato C++ per Linux Tools, aprire la finestra degli strumenti del terminale. L'elenco a discesa Terminale viene popolato con le connessioni archiviate. Quando si seleziona una connessione, viene aperta una nuova finestra terminale in Visual Studio che mostra uno pseudo-terminale nel sistema remoto. Sono supportati tutti i caratteri di controllo, i colori e la consapevolezza posizionale del cursore.

  • Visual Studio può ora aggiungere modelli di classe Unreal Engine per i progetti UE. Per provare questa funzionalità, verificare che il supporto dell'IDE per Unreal Engine sia selezionato nel carico di lavoro Sviluppo di giochi con C++ nel Programma di installazione di Visual Studio. Quando si lavora a un progetto UE, fare clic con il pulsante destro del mouse nel progetto o in una cartella/filtro e scegliere Aggiungi>classe UE.

  • Passare a Definizione ora memorizza la firma precedente e si sposta di conseguenza quando una corrispondenza migliore non è disponibile( ad esempio, dopo aver modificato manualmente la firma di una coppia). La velocità di risposta di Go To All è migliorata. In precedenza, i risultati venivano visualizzati dopo l'interruzione della digitazione. Nella nuova esperienza i risultati vengono visualizzati durante la digitazione.

  • Nei contesti che richiedono enum il completamento dei tipi (ad esempio, assegnazioni a enum variabili, etichette case, tipo restituito enum e così via), l'elenco di completamento automatico viene ora filtrato in base ai soli enumeratori e costrutti correlati corrispondenti.

  • Aggiunta del supporto nuGet PackageReference per i progetti MSBuild C++/CLI destinati a .NET Core. Questa modifica è stata apportata per sbloccare codebase miste dalla possibilità di adottare .NET Core. Questo supporto non funziona per altri tipi di progetto C++ o per i tipi di progetto C++ destinati a .NET Framework. Non sono previsti piani per estendere il supporto packageReference ad altri scenari C++. Il team sta lavorando a esperienze separate che coinvolgono vcpkg per scenari non MSBuild e per aggiungere funzionalità maggiori.

  • È stata aggiunta una finestra monitoraggio seriale per lo sviluppo incorporato, disponibile tramite Debug>di Monitoraggio seriale di Windows.>

  • Indicizzazione C++ migliorata del 66% rispetto a 17,2.

  • Aggiornamento della versione di CMake fornita con Visual Studio alla versione 3.23. Per informazioni dettagliate su ciò che è disponibile, vedere le note sulla versione di CMake 3.23.

  • Aggiornamento delle versioni degli strumenti LLVM fornite con Visual Studio alla versione 14. Per informazioni dettagliate su ciò che è disponibile, vedere le note sulla versione di LLVM e Clang .

  • Aggiornamento del set di strumenti C++ di Dev 16.11 side-by-side alla versione 14.29.30145.00. La versione più recente del set di strumenti C++ di Dev 16.11 contiene importanti correzioni di bug, inclusa la correzione di tutti i report dei difetti C++20 rimanenti. Per altre informazioni sulle correzioni di bug, inclusi i report sui difetti di C++20 in Dev 16.11, vedere Note sulla versione di Visual Studio 2019 versione 16.11.14.

  • Sono stati apportati vari miglioramenti all'esperienza nell'editor dei moduli C++. Stiamo lavorando costantemente per migliorare la qualità dell'esperienza, ma incoraggiamo a provarli nella versione 17.3. Segnalare i problemi rimanenti tramite la community degli sviluppatori.

Novità di C++ in Visual Studio versione 17.2

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio nella versione 17.2, vedere Note sulla versione di Visual Studio 2022 versione 17.1.

  • Aggiunta del supporto del compilatore per la deduplicazione delle funzionalità C++23, disponibile nell'opzione /std:c++latest .this

  • Aggiunta del supporto di IntelliSense per le funzionalità C++23 che this deducono e if consteval.

  • Aggiunta del supporto per il nome del parametro inline e l'hint di tipo, attivati premendo ALT+F1 o toccando due volte CTRL. Questo comportamento può essere personalizzato in Strumenti > Opzioni > Editor > di testo C/C++ > IntelliSense.

  • Aggiunta del supporto sperimentale per i moduli C++20 nei progetti CMake. Questo supporto è attualmente disponibile solo con il generatore di Visual Studio (MSBuild).

  • Nella versione 17.1 sono state introdotte le visualizzazioni RTOS e registro periferiche per sviluppatori incorporati. Continuiamo a migliorare le funzionalità di queste visualizzazioni con miglioramenti dell'usabilità nella versione 17.2:

    • La finestra degli strumenti RTOS è ora nascosta per impostazione predefinita. Impedisce la visualizzazione di una finestra degli strumenti con messaggi di errore non pertinenti quando non si usa un RTOS.
    • Quando si fa doppio clic su un oggetto RTOS nella finestra degli strumenti, viene aggiunto un controllo per l'oggetto .
    • Quando si selezionano i valori iniziale e finale per il puntatore dello stack nella finestra degli strumenti RTOS, viene aperto nella finestra della memoria.
    • Aggiunta della consapevolezza del thread per le destinazioni del dispositivo alla finestra dello stack di chiamate.
    • Gli utenti possono ora selezionare un'icona a forma di puntina accanto a periferiche, registri o campi per aggiungerli nella parte superiore della visualizzazione periferica.
  • Sono state aggiunte implementazioni dei report dei difetti di C++20 rimanenti (noti anche come backport). Tutte le funzionalità di C++20 sono ora disponibili nell'opzione /std:c++20 . Per altre informazioni sui backport implementati, vedere il progetto C++20 Defect Reports nel repository GitHub Microsoft/STL e il post di blog STL Completes /std:c++20 di MSVC.

  • Sono state aggiunte varie funzionalità della libreria C++23, disponibili nell'opzione /std:c++latest . Per altre informazioni sulle nuove funzionalità, vedere il log delle modifiche del repository STL.

  • Miglioramento delle prestazioni dell'indicizzazione C++ iniziale fino al 20%, a seconda della profondità del grafico di inclusione.

Novità di C++ in Visual Studio versione 17.1

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio nella versione 17.1, vedere Note sulla versione di Visual Studio 2022 versione 17.1.

  • Viene aggiunto un nuovo modello Configura set di impostazioni per configurare e compilare progetti CMake in un sistema macOS remoto con CMakePresets.json. È anche possibile avviare le destinazioni CMake in un sistema macOS remoto e quindi eseguire il debug in remoto nel debugger di Visual Studio supportato da GDB o LLDB.
  • È ora possibile eseguire il debug dei dump di core in un sistema macOS remoto da Visual Studio con LLDB o GDB.
  • Le versioni di Clang e LLVM fornite con Visual Studio vengono aggiornate alla versione 13.
  • L'integrazione CMake di Visual Studio è attiva solo quando un CMakeLists.txt oggetto viene identificato nella radice dell'area di lavoro aperta. Se un CMakeLists.txt oggetto viene identificato a un altro livello dell'area di lavoro, viene richiesto di attivare l'integrazione CMake di Visual Studio con una notifica.
  • Nuove visualizzazioni che consentono di controllare e interagire con i registri delle periferiche su microcontroller e oggetti RTOS (Real Time Operating Systems), disponibili tramite Debug>dei registri incorporati di Windows>
  • È stata aggiunta una nuova visualizzazione thread per i progetti RTOS, disponibile tramite Debug>di oggetti RTOS di Windows.> Per altre informazioni, vedere Embedded Software Development in Visual Studio.

Novità di C++ in Visual Studio versione 17.0

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio, vedere Note sulla versione di Visual Studio 2022 versione 17.0.

  • L'IDE di Visual Studio, devenv.exe, è ora un'applicazione nativa a 64 bit.

  • Il set di strumenti MSVC ora usa l'hashing dell'origine SHA-256 nei record di debug. In precedenza, il set di strumenti usa MD5 per l'hashing di origine per impostazione predefinita.

  • Gli strumenti di compilazione v143 sono ora disponibili tramite il programma di installazione di Visual Studio e negli strumenti di compilazione autonomi.

Ricaricamento rapido per C++ nativo

  • Ricaricamento rapido per C++ consente di apportare molti tipi di modifiche al codice all'app in esecuzione e applicarle senza dover sospendere l'esecuzione dell'app con un punto di interruzione simile a un punto di interruzione.

In Visual Studio 2022, quando si avvia l'app nel debugger, è possibile usare il pulsante Ricaricamento rapido per modificare l'applicazione mentre è ancora in esecuzione. Questa esperienza è basata su modifica e continuazione nativa. Per altre informazioni sulle modifiche supportate, vedere Modifica e continuazione (C++).

  • Ricaricamento rapido supporta i progetti CMake e Open Folder.

Supporto di WSL2

  • È ora possibile compilare ed eseguire il debug in modo nativo in WSL2 senza stabilire una connessione SSH. Sono supportati entrambi i progetti CMake multipiattaforma e i progetti Linux basati su MSBuild.

Supporto migliorato di CMake

  • Aggiornata la versione di CMake fornita con Visual Studio alla versione 3.21. Per altre informazioni sulle funzionalità disponibili in questa versione, vedere le note sulla versione di CMake 3.21.

  • Le pagine di panoramica di CMake vengono aggiornate per supportare CMakePresets.json.

  • È ora possibile configurare e compilare i progetti CMake con CMake 3.21 e CMakePresets.json v3.

  • Visual Studio supporta ora l'opzione buildPresets.targets in CMakePresets.json. Questa opzione consente di compilare un subset di destinazioni nel progetto CMake.

  • Il menu Progetto nei progetti CMake è semplificato ed espone le opzioni "Elimina cache e riconfigura" e "Visualizza cache".

  • Implementazione dell'opzione del /scanDependencies compilatore per elencare le dipendenze del modulo C++20 per i progetti CMake, come descritto in P1689R5. Si tratta di un passo verso il supporto per la compilazione di progetti basati su moduli con CMake e stiamo lavorando per completare questo supporto nelle versioni successive.

Miglioramenti della libreria standard

Selezionare Miglioramenti della libreria standard (STL) evidenziati qui. Per un elenco completo delle nuove funzionalità, modifiche, correzioni di bug e miglioramenti delle prestazioni, vedere il log delle modifiche del team STL.

  • Sono stati aggiunti visualizzatori di debug per migliorare la visualizzazione dei tipi seguenti: , , (e i relativi iteratori), default_sentinel_t, , ranges::single_viewunreachable_sentinel_tranges::iota_viewranges::empty_view(e il relativo iteratore/sentinel), ranges::ref_view, , thread::idjthreadthread, , e u8stringbind_front()source_locationfilesystem::path
  • Aggiunta [[nodiscard]] alla stoi() famiglia di funzioni in <string> e a varie funzioni in <locale> come le collate funzioni membro, has_facet()e le isalnum() famiglie e tolower() .
  • P0980R1 made std::stringconstexpr in VS 2019 16.10. Ora supportato per Clang.
  • P1004R2 made std::vectorconstexprin VS 2019 16.10. Ora supportato per Clang.

Funzionalità evidenziate di C++23

  • P1048R1 Aggiunta is_scoped_enumdi , un nuovo tratto per la libreria standard C++, che rileva se un tipo è un'enumerazione con ambito.
  • out_ptr()P1132R7,inout_ptr()
  • contains() P1679R3 For basic_string ebasic_string_view
  • to_underlying() P1682R3 per enumerazioni
  • P2162R2 Consenti l'ereditarietà da std::variant
  • P2166R1 Proibire labasic_string costruzione e basic_string_view da nullptr. Questa modifica è una modifica che causa un'interruzione di origine. Il codice che in precedenza aveva un comportamento non definito in fase di esecuzione viene ora rifiutato con errori del compilatore.
  • P2186R2 Supporto di Garbage Collection rimosso. Questa modifica rimuove declare_reachable, undeclare_reachable, declare_no_pointers, undeclare_no_pointers, get_pointer_safety. In precedenza, queste funzioni non avevano alcun effetto.

Miglioramenti delle prestazioni evidenziati

  • <format> ora rileva quando scrive in un oggetto per un back_insert_iteratorbasic_string oggetto o e vectoresegue una chiamata più veloce a insert() in corrispondenza end() del contenitore.
  • Sono stati migliorate le prestazioni di std::find() e std::count() per vector<bool> 19x e 26x (volte, non per cento).
  • Abbiamo migliorato le prestazioni di std::count() per vector<bool>
  • std::byte ora ha le stesse prestazioni di unsigned char in reverse() e variant::swap()

Supporto di Clang e LLVM

  • Gli strumenti LLVM forniti con Visual Studio vengono aggiornati a LLVM 12. Per altre informazioni, vedere le note sulla versione di LLVM.

  • Il supporto Clang-cl è stato aggiornato a LLVM 12.

  • È ora possibile eseguire il debug dei processi in esecuzione in un sistema remoto da Visual Studio usando LLDB.

C++ AMP deprecato

  • Le intestazioni C++ AMP sono ora deprecate. L'inclusione <amp.h> in un progetto C++ genera errori di compilazione. Per disattivare gli errori, definire _SILENCE_AMP_DEPRECATION_WARNINGS. Per altre informazioni, vedere i collegamenti di deprecazione AMP.

Miglioramenti di IntelliSense

  • Sono stati apportati miglioramenti in IntelliSense C++ quando si fornisce l'evidenziazione della navigazione e della sintassi per i tipi da moduli importati e unità di intestazione. IntelliSense è un'area attiva di investimenti per noi. Aiutaci a migliorare: condividi i tuoi commenti e suggerimenti sulla community degli sviluppatori usando l'aiuto per>inviare commenti e suggerimenti.

  • Sono stati migliorate le prestazioni di IntelliSense C++ ottimizzando l'utilizzo delle intestazioni memorizzate nella cache e l'accesso al database dei simboli, offrendo tempi di caricamento migliorati per accedere al codice.

  • Linter del codice IntelliSense per C++ è ora attivo per impostazione predefinita, fornendo suggerimenti istantanei di tipo you-type e suggerimenti per correggere i difetti comuni del codice.

  • IntelliSense C++ per i progetti CMake ora funziona quando si usa un set di impostazioni con un nome visualizzato.

Aggiornamenti del carico di lavoro C++

  • Aggiornato a NDK r21 LTS nel carico di lavoro Sviluppo di applicazioni mobili C++.

  • Il carico di lavoro Sviluppo di giochi con C++ installa ora l'ultimo motore Unreal con supporto per Visual Studio 2022.

Miglioramenti dell'analisi del codice

  • L'analisi del codice applica ora che restituisce valori di funzioni annotate con _Check_return_ o _Must_inspect_result_ devono essere controllate.

  • Il rilevamento della dereferenziazione puntatore Null è migliorato negli strumenti di analisi del codice.

  • Aggiunta del supporto per gsl::not_null l'analisi del codice.

  • Supporto per Libfuzzer nell'opzione del /fsanitize=fuzzer compilatore.

Note sulla versione per le versioni precedenti

Sono disponibili anche le note sulla versione per le versioni precedenti di C++. Per informazioni sulle novità di C++ in Visual Studio 2019, vedere Novità di C++ in Visual Studio 2019. Per informazioni sulle novità per C++ in Visual Studio 2017, vedere Novità di C++ in Visual Studio 2017. Per informazioni sulle novità delle versioni precedenti, vedere Novità di Visual C++ Da 2003 a 2015.

Problemi noti

C++ IntelliSense

Per altre informazioni su altri problemi aperti e sulle soluzioni alternative disponibili per C++ in Visual Studio 2022, vedere l'elenco dei problemi della community degli sviluppatori C++.

Feedback e suggerimenti

Ci piacerebbe sapere cosa ne pensi! È possibile segnalare un problema o suggerire una funzionalità usando l'icona Invia commenti e suggerimenti nell'angolo in alto a destra del programma di installazione o dell'IDE di Visual Studio o dall'invio>di commenti e suggerimenti. È possibile tenere traccia dei problemi usando Visual Studio Developer Community, in cui si aggiungono commenti o si trovano soluzioni. È anche possibile usufruire gratuitamente del supporto per l'installazione con Assistenza live chat.

Blog

Sfruttare le informazioni dettagliate e le raccomandazioni disponibili nel sito Blog per sviluppatori Microsoft per rimanere aggiornati su tutte le nuove versioni. I blog includono post approfonditi su un'ampia gamma di funzionalità. Il blog del team C++ e il blog di Visual Studio sono di particolare interesse.