Condividi tramite


Novità di C++ in Visual Studio 2019

In Visual Studio 2019 sono stati inclusi numerosi aggiornamenti e correzioni per l'ambiente Microsoft C++. Sono stati corretti numerosi bug e problemi del compilatore e degli strumenti. Molti di questi problemi sono stati segnalati dai clienti tramite le opzioni Segnala un problema e Invia un suggerimento in Commenti e suggerimenti. Microsoft ringrazia i clienti per le segnalazioni inviate.

Per altre informazioni sulle novità in tutto Visual Studio, visitare la pagina Novità 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à per C++ in Visual Studio 2015 e versioni precedenti, vedere Visual C++: novità dalla versione 2003 alla 2015. Per altre informazioni, vedere La documentazione di Microsoft C++: Novità.

Novità di C++ in Visual Studio versione 16.11

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.11, vedere Novità di Visual Studio 2019 versione 16.11.

  • Il compilatore supporta ora la /std:c++20 modalità del compilatore. In precedenza, le funzionalità di C++20 erano disponibili solo in /std:c++latest modalità in Visual Studio 2019. Le funzionalità originariamente necessarie /std:c++latest ora funzionano in /std:c++20 modalità o versioni successive nelle versioni più recenti di Visual Studio.

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

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

Novità di C++ in Visual Studio versione 16.10

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.10, vedere Novità di Visual Studio 2019 versione 16.10.

  • Tutte le funzionalità di C++20 sono ora disponibili in /std:c++latest. Anche se l'implementazione di MSVC degli standard C++20 (come attualmente pubblicato da ISO) è completa, alcune funzionalità principali della libreria C++20 dovrebbero essere modificate dai prossimi report difetti (correzioni di bug ISO C++20) che potrebbero modificarle in modo non compatibile con ABI. Per altri dettagli, vedere Problema Microsoft/STL #1814 .

    • C++20 immediate functions & constinit support added in 16.10
    • Le parti finali di <chrono>: nuovi orologi, secondi intercalari, fusi orari e analisi
    • Implementazione di per la formattazione del <format> testo
  • /openmp:llvm è ora disponibile in x86 e ARM64, oltre a x64

  • Le directory di inclusione possono ora essere designate come esterne con livelli di avviso di compilazione personalizzati e impostazioni di analisi del codice.

  • Aggiunta dell'opzione /await:strict per abilitare coroutine in stile C++20 nelle modalità del linguaggio precedenti.

  • La visualizzazione del debugger di std::coroutine_handle<T> visualizza ora il nome e la firma della funzione coroutine originali e il punto di sospensione corrente.

  • Aggiunta del supporto per CMakePresets.

  • È ora necessario accettare o negare l'impronta digitale della chiave host presentata dal server quando si aggiunge una nuova connessione remota in Visual Studio.

  • Aggiunta di un'opzione /external a MSVC per specificare le intestazioni che devono essere considerate esterne a scopo di avviso.

Novità di C++ in Visual Studio versione 16.9

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.9, vedere Novità di Visual Studio 2019 versione 16.9.

  • Sanificatore di indirizzi:

    • Il supporto per la purificazione degli indirizzi in Windows non è in modalità sperimentale e ha raggiunto la disponibilità generale.

    • Supporto espanso, correzione RtlAllocateHeap di un problema di compatibilità con RtlCreateHeap e RtlAllocateHeap intercettori durante la creazione di pool di memoria eseguibili.

    • Aggiunta del supporto per le funzioni legacy GlobalAlloc e LocalAlloc della famiglia di memoria. È possibile abilitare questi intercettori impostando il flag ASAN_OPTIONS=windows_hook_legacy_allocators=truedi ambiente .

    • Aggiornati i messaggi di errore per l'interleaving della memoria shadow e l'errore di intercettazione per rendere espliciti problemi e risoluzioni.

    • L'integrazione dell'IDE può ora gestire la raccolta completa di eccezioni che ASan è in grado di segnalare.

    • Il compilatore e il linker suggeriranno di generare informazioni di debug se rilevano che si sta compilando con ASan ma non emettendo informazioni di debug.

  • È ora possibile impostare come destinazione la versione LLVM del runtime OpenMP con il nuovo commutatore /openmp:llvmCL . In questo modo viene aggiunto il supporto per la lastprivate clausola nelle #pragma omp sezioni e nelle variabili di indice senza segno nei cicli paralleli for . L'opzione /openmp:llvm è attualmente disponibile solo per la destinazione amd64 ed è ancora sperimentale.

  • I progetti CMake di Visual Studio dispongono ora di un supporto di prima classe per lo sviluppo remoto di Windows. Sono inclusi la configurazione di un progetto CMake per la destinazione ARM64 in Windows, la distribuzione del progetto in un computer Windows remoto e il debug del progetto in un computer Windows remoto da Visual Studio.

  • La versione di Ninja acclusa a Visual Studio in Windows è stata aggiornata alla versione 1.10. Per altre informazioni su ciò che è incluso, vedere le note sulla versione di Ninja 1.10.

  • La versione di CMake disponibile con Visual Studio è stata aggiornata alla versione 3.19. Per altre informazioni sulle funzionalità incluse, vedere le note sulla versione di CMake 3.19.

  • Contrassegnati come molti tipi di blocco/protezione nell'elenco STL come nodiscard.

  • IntelliSense:

  • MSVC determina ora i runtime di Address Sanitizer corretti necessari per i file binari. Il progetto di Visual Studio otterrà automaticamente le nuove modifiche. Quando si usa address sanitizer nella riga di comando, è ora necessario passare /fsanitize=address solo al compilatore.

  • La gestione connessione di Visual Studio ora supporta chiavi private usando l'algoritmo di chiave pubblica ECDSA.

  • Aggiornamento delle versioni di LLVM e Clang fornite nel programma di installazione alla versione 11. Per altre informazioni, leggere le note sulla versione per LLVM e Clang.

  • Visual Studio userà ora le variabili CMake dai file della toolchain per la configurazione di IntelliSense. Questo offrirà un'esperienza migliore per lo sviluppo incorporato e Android.

  • Implementazione della proposta More Constexpr Containers, che consente ai distruttori e alle nuove espressioni di essere constexpr. In questo modo si apre la strada per le utilità come constexpr std::vector e std::string.

  • Supporto esteso per i moduli IntelliSense di C++ 20, tra cui Vai a definizione, Vai al modulo e completamento dei membri.

  • I modelli di funzione abbreviati sono ora supportati nel compilatore MSVC.

Novità di C++ in Visual Studio versione 16.8

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.8, vedere Novità di Visual Studio 2019 versione 16.8.

  • Le coroutine C++20 sono ora supportate /std:c++latest in (o /std:c++20 a partire da Visual Studio 2019 versione 16.11) e l'intestazione <coroutine> .

  • IntelliSense offre ora il supporto per le intestazioni C++20 <concepts> e <ranges>, nonché per la ridenominazione e l'esplorazione delle definizioni dei concetti.

  • La libreria STL ora supporta la maggior parte degli intervalli C++20.

  • In MSVC sono ora supportate le funzioni membro speciali trivial in modo condizionale.

  • C11 e C17 sono ora supportati nei commutatori e /std:c17 ./std:c11

  • Altri miglioramenti di STL includono il supporto completo per std::atomic_refstd::midpoint , e std::execution::unseqstd::lerp , ottimizzazioni per std::reverse_copye altro ancora.

  • Aggiornata a CMake 3.18 la versione di CMake acclusa a Visual Studio.

  • Gli strumenti di analisi del codice supportano ora lo standard SARIF 2.1: il formato di log di analisi statica standard del settore.

  • Per gli strumenti di compilazione mancanti nei progetti Linux verrà ora visualizzato un avviso sulla barra degli strumenti e sarà disponibile una descrizione chiara degli strumenti mancanti nell'elenco degli errori.

  • È ora possibile eseguire il debug di dump core di Linux in un sistema Linux remoto o in WSL direttamente da Visual Studio.

  • Per la generazione di commenti Doxygen C++, sono state aggiunte altre opzioni di stile dei commenti (/*! e //!).

  • Annunci vcpkg aggiuntivi.

  • Supporto del compilatore per le espressioni lambda in contesti non valutati.

  • /DEBUG:FULL miglioramento delle prestazioni dei collegamenti grazie alla creazione di PDB multithreading. Diverse applicazioni di grandi dimensioni e giochi AAA usano collegamenti da 2 a 4 volte più veloci.

  • Il debugger di Visual Studio ora dispone del supporto per char8_t.

  • Supporto per i progetti ARM64 con clang-cl.

  • Supporto per gli oggetti intrinseci Intel AMX.

Novità di C++ in Visual Studio versione 16.7

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.7, vedere Novità di Visual Studio 2019 versione 16.7.

  • Il supporto di C++ remoto supporta ora una gamma più ampia di distribuzioni e shell Linux, tra cui sh, csh, bash, tsch, ksh, zsh e dash. È possibile ignorare la scelta di una shell per una connessione remota modificando la nuova proprietà "shell" tramite ConnectionManager.exe. Questo supporto è stato testato con i progetti Linux basati su MSBuild e i progetti CMake destinati a un sistema Linux remoto o a WSL.

  • È ora possibile usare Ninja (un sistema di compilazione che valuta le compilazioni incrementali molto rapidamente) per migliorare i tempi di compilazione incrementali per i progetti Linux basati su MSBuild. È possibile acconsentire esplicitamente a questa funzionalità impostando "Abilita compilazioni incrementali" su "Con Ninja" nella pagina delle proprietà generali. Ninja (ninja-build) deve essere installato nel sistema Linux remoto o in WSL.

  • Sono state implementate nuove funzionalità della libreria standard C++20. Per un elenco dettagliato, vedere il log delle modifiche STL su GitHub.

  • È ora possibile modificare e impostare le connessioni SSH remote predefinite in Gestione connessioni. Ciò significa che è possibile modificare una connessione remota esistente (ad esempio, se il relativo indirizzo IP è stato modificato) e impostare le connessioni predefinite da utilizzare in CMakeSettings.json e launch.vs.json. Le connessioni SSH remote consentono di eseguire direttamente da Visual Studio la compilazione e il debug di progetti C++ in un sistema Linux remoto.

  • Supporto avanzato di IntelliSense per Clang in Windows (clang-cl) in Visual Studio. Il percorso di inclusione di Clang include ora le librerie Clang. È stata migliorata la visualizzazione della linea ondulata nell'editor quando si usa la libreria std ed è stato aggiunto il supporto per C++2a in modalità Clang.

  • è ora possibile provare la sottolineatura degli errori del codice e visualizzare un numero maggiore di correzioni rapide suggerite nei progetti C++. Abilitare questa funzionalità in Strumenti > Opzioni > Editor > di testo C/C++ > Sperimentale. Impostare Disable Experimental Code Linter su false. Per altre informazioni, vedere il blog del team di C++.

  • Sono state aggiunte quattro nuove regole di analisi del codice per incorporare funzionalità di sicurezza aggiuntive in C++: C26817, C26818, C26819 e C26820.

  • È stato aggiunto un supporto di livello avanzato per eseguire il debug di progetti CMake in sistemi remoti con gdbserver.

  • Per i progetti nativi x64 è ora disponibile un'implementazione sperimentale di AddressSanitizer per C++ in Visual Studio che consente di rilevare facilmente errori di danneggiamento della memoria. Ora è supportato anche l'uso dei runtime di debug (/MTd, /MDd, /LDd).

  • IntelliSense include ora il supporto di base per concetti, inizializzatori designati e varie altre funzionalità di C++ 20.

  • .ixx i file e .cppm vengono ora riconosciuti come C++ e vengono trattati come tali dall'evidenziatore di sintassi e DatelliSense.

Novità di C++ in Visual Studio versione 16.6

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.6, vedere Novità di Visual Studio 2019 versione 16.6.

  • Miglioramento della generazione di commenti Doxygen/XML: genera automaticamente stub di commento Doxygen o XML doc digitando /// o /** sopra le funzioni. Queste informazioni vengono ora visualizzate anche in Informazioni rapide.

  • Supporto Ninja per CMake per Linux/WSL: usare Ninja come generatore sottostante durante la compilazione di progetti CMake in WSL o in un sistema remoto. Ninja è ora il generatore predefinito quando si aggiunge una nuova configurazione Linux o WSL.

  • Modelli di debug per il debug remoto di CMake: sono stati semplificati i modelli per il debug di progetti CMake in un sistema Linux remoto o WSL con gdb.

  • Supporto iniziale per i concetti di C++20: IntelliSense ora riconosce i concetti di C++20 e li suggerisce nell'elenco dei membri.

Novità di C++ in Visual Studio versione 16.5

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.5, vedere Novità di Visual Studio 2019 versione 16.5.

  • Supporto del modello e delle variabili membro in IntelliCode Team Completions: gli sviluppatori C++ possono ora eseguire il training dei modelli IntelliCode nelle proprie codebase. Questa condizione è denominata modello di team per i completamenti, perché consente di sfruttare i vantaggi delle procedure consolidate dei team. Sono stati inoltre migliorati i suggerimenti IntelliCode per le variabili membro.

  • Miglioramenti di IntelliSense:

    • IntelliSense ora visualizza nomi di tipi più leggibili quando si usa la libreria standard.
    • È stata aggiunta la possibilità di attivare o disattivare la funzione Invio, Spazio e Tab come caratteri di commit e attivare o disattivare se tabulazione viene usata per inserire il frammento. Trovare queste impostazioni in Strumenti > Opzioni > Editor > di testo C/C++ > Advanced > IntelliSense.
  • Gestione connessioni sulla riga di comando: È ora possibile interagire con le connessioni remote archiviate tramite la riga di comando. È utile per attività come il provisioning di un nuovo computer di sviluppo o la configurazione di Visual Studio nell'integrazione continua.

  • Eseguire il debug e la distribuzione per WSL: usare il supporto nativo di Visual Studio per WSL per separare il sistema di compilazione dal sistema di distribuzione remota. È ora possibile compilare in modo nativo in WSL e distribuire gli artefatti di compilazione in un secondo sistema remoto per il debug. Questo flusso di lavoro è supportato sia dai progetti CMake che dai progetti Linux basati su MSBuild.

  • Supporto per la modalità di conformità FIPS 140-2: Visual Studio supporta ora la modalità di conformità FIPS 140-2 durante lo sviluppo di applicazioni C++ destinate a un sistema Linux remoto.

  • Servizi di linguaggio per i file del linguaggio CMake e una modifica migliore del progetto CMake:

    • La copia dei file di origine per i progetti CMake destinati a un sistema Linux remoto è stata ottimizzata. Visual Studio ora conserva un "file di impronte digitali" dell'ultimo set di origini copiate in modalità remota e ottimizza il comportamento in base al numero di file modificati.

    • Le funzionalità di spostamento del codice, ad esempio Vai a definizione e Trova tutti i riferimenti, sono ora supportate per funzioni, variabili e destinazioni nei file di script CMake.

    • È possibile aggiungere, rimuovere e rinominare i file di origine e le destinazioni nei progetti CMake dall'IDE senza modificare manualmente gli script CMake. Quando si aggiungono o rimuovono file con Esplora soluzioni, Visual Studio modifica automaticamente il progetto CMake. È anche possibile aggiungere, rimuovere e rinominare le destinazioni del progetto dalla visualizzazione Destinazioni di Esplora soluzioni.

  • Miglioramenti del progetto Linux: i progetti Linux di Visual Studio ora hanno IntelliSense più accurato e consentono di controllare la sincronizzazione delle intestazioni remote in base al progetto.

Novità di C++ in Visual Studio versione 16.4

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.4, vedere Novità di Visual Studio 2019 versione 16.4.

  • L'analisi del codice supporta Clang-Tidy ora in modo nativo sia per i progetti MSBuild che per CMake, indipendentemente dal fatto che si usi un set di strumenti Clang o MSVC. I controlli clang-tidy possono essere eseguiti come parte dell'analisi del codice in background, visualizzati come avvisi nell'editor (controllo ortografia) e visualizzati nell'Elenco errori.

  • I progetti di Visual Studio CMake ora hanno pagine Panoramica con opzioni introduttive per lo sviluppo multipiattaforma. Queste pagine sono dinamiche e consentono di connettersi a un sistema Linux e di aggiungere una configurazione Linux o WSL al progetto CMake.

  • Il menu a discesa di avvio per i progetti CMake ora visualizza le destinazioni usate più di recente e può essere filtrato.

  • C++/CLI supporta ora l'interoperabilità con .NET Core 3.1 e versioni successive in Windows.

  • È ora possibile abilitare ASan per i progetti compilati con MSVC in Windows per la strumentazione di runtime del codice C++, che consente di rilevare gli errori di memoria.

  • Aggiornamenti alla libreria standard C++ di MSVC:

    • C++17: implementazione to_chars() della precisione generale, completamento P0067R5 conversioni di stringhe elementari (carbonnv). Viene così completata l'implementazione di tutte le funzionalità della libreria nello standard C++17.
    • C++20: implementazione P1754R1 Rinominare i concetti in standard_case. Per includere queste funzionalità, usare l'opzione del /std:c++latest compilatore (o /std:c++20 a partire da Visual Studio 2019 versione 16.11). L'opzione può essere impostata anche nella pagina delle > proprietà del progetto linguaggio C/C++ delle proprietà proprietà del linguaggio C/C++ > usando la proprietà Standard del linguaggio C++.
  • È ora disponibile una nuova raccolta di strumenti denominati C++ Build Insights . Per altre informazioni sull'annuncio, vedere il blog del team C++.

Novità di C++ in Visual Studio versione 16.3

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.3, vedere Novità di Visual Studio 2019 versione 16.3.

  • Gli sviluppatori C++ possono ora attivare o disattivare i commenti della riga usando i tasti di scelta rapida CTRL+K, CTRL+/.

  • Gli elenchi di membri di IntelliSense vengono ora filtrati in base ai qualificatori di tipo, ad esempio ora const std::vector filtra i metodi come push_back.

  • Sono state aggiunte queste funzionalità della libreria standard C++20 (disponibili /std:c++latestin o /std:c++20 a partire da Visual Studio 2019 versione 16.11):

    • P0487R1: Correzioneoperator>>(basic_istream&, CharT*)
    • P0616R0: Uso move() di In<numeric>
    • P0758R1: is_nothrow_convertible
    • P0734R0: estensioni C++ per concetti
    • P0898R3: Concetti della libreria standard
    • P0919R3: ricerca eterogenea per contenitori non ordinati
  • Nuovi controlli delle linee guida di base di C++, inclusi il nuovo set di regole "Regole Enum" e constaltre regole di tipo , enume .

  • Un nuovo schema di colorazione semantica predefinito consente agli utenti di comprendere meglio il codice a colpo d'occhio, la finestra dello stack di chiamate può essere configurata per nascondere gli argomenti dei modelli e IntelliCode per C++ è attivo per impostazione predefinita.

  • Configurare le destinazioni di debug e le attività personalizzate con le variabili di ambiente tramite CMakeSettings.json o CppProperties.json oppure il nuovo tag "env" nelle singole destinazioni e attività in launch.vs.json e tasks.vs.json.

  • Gli utenti possono ora usare un'azione rapida per i pacchetti vcpkg mancanti per aprire automaticamente una console ed eseguire l'installazione predefinita di vcpkg.

  • La copia remota dell'intestazione eseguita dai progetti Linux (CMake e MSBuild) è stata ottimizzata e ora viene eseguita in parallelo.

  • Il supporto nativo per WSL di Visual Studio ora supporta le compilazioni parallele per i progetti Linux basati su MSBuild.

  • Gli utenti possono ora specificare un elenco di output di compilazione locale da distribuire in un sistema remoto con progetti makefile di Linux.

  • Le descrizioni delle impostazioni nell'Editor impostazioni CMake ora contengono più contesto e collegamenti alla documentazione utile.

  • Il modello di base C++ per IntelliCode è ora abilitato per impostazione predefinita. Per modificare questa impostazione, passare a Strumenti>Opzioni>IntelliCode.

Novità di C++ in Visual Studio versione 16.2

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.2, vedere Novità di Visual Studio 2019 versione 16.2.

  • Per i progetti CMake locali configurati con Clang, l'analisi codice esegue ora controlli Clang-Tidy, visualizzati come parte dell'analisi codice in background come avvisi nell'editor (linee a zigzag) e nell'elenco degli errori.

  • Aggiornamento dell'intestazione <charconv> per conversioni di stringhe elementari P0067R5 di C++17:

    • Aggiunta di overload to_chars() a virgola mobile per precisione chars_format::fixed e chars_format::scientific (chars_format::general precision è l'unica parte non ancora implementata)
    • Ottimizzato chars_format::fixed più breve
  • Sono state aggiunte queste funzionalità della libreria standard C++20:

    • /std:c++latest Disponibile in (o /std:c++20 a partire da Visual Studio 2019 versione 16.11):
      • P0020R6: atomic<floating-point>
      • P0463R1: enumerazione endian
      • P0482R6: tipo char8_t per caratteri e stringhe UTF-8
      • P0653R2:to_address() per la conversione di un puntatore in puntatore non elaborato
    • Disponibile in /std:c++17 e /std:c++latest (o /std:c++20 a partire da Visual Studio 2019 versione 16.11):
      • P0600R1:[[nodiscard]] nella libreria
    • Disponibile in modo incondizionato:
      • P0754R2: intestazione <version>
      • P0771R1: il costruttore di spostamento std::function deve essere noexcept
  • Windows SDK non è più una dipendenza per CMake per Windows e CMake per componenti Linux.

  • Miglioramenti al linker C++ per migliorare significativamente i tempi di compilazione delle iterazioni per gli input di maggiori dimensioni. /DEBUG:FAST e /INCREMENTAL i tempi sono in media due volte più veloci, ed /DEBUG:FULL è ora da tre a sei volte più veloce.

Novità di C++ in Visual Studio versione 16.1

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.1, vedere Novità di Visual Studio 2019 versione 16.1.

Compilatore C++

  • Queste funzionalità di C++20 sono state implementate nel compilatore C++, disponibili /std:c++latest in (o /std:c++20 a partire da Visual Studio 2019 versione 16.11):

    • Capacità aumentata di trovare modelli di funzione tramite la ricerca dipendente dall'argomento di espressioni di chiamata di funzione con argomenti di modello espliciti (P0846R0).
    • Inizializzazione designata (P0329R4), che consente di selezionare membri specifici nell'inizializzazione aggregata, ad esempio usando la Type t { .member = expr } sintassi .
  • Il supporto lambda è stato rivisto e interessa ora un numero elevato di bug duraturi. Questa modifica è abilitata per impostazione predefinita quando si usa /std:c++20 o /std:c++latest. In /std:c++17 modalità lingua e in modalità predefinita (/std:c++14 ) il nuovo parser può essere abilitato usando /Zc:lambda in Visual Studio 2019 versione 16.9 o successiva (precedentemente disponibile a /experimental:newLambdaProcessor partire da Visual Studio 2019 versione 16.3), ad esempio /std:c++17 /Zc:lambda.

Miglioramenti della libreria standard di C++

  • Queste funzionalità di C++20 sono state aggiunte all'implementazione della libreria standard C++, disponibile in /std:c++latest:
    • starts_with e ends_with per basic_string e basic_string_view.
    • contains per i contenitori associativi.
    • remove, remove_if e unique per list e forward_list ora restituiscono size_type.
    • shift_left e shift_right aggiunti a <algorithm>.

IDE C++

IntelliCode per C++

IntelliCode è ora disponibile come componente facoltativo nel carico di lavoro Sviluppo di applicazioni desktop con C++. Per altre informazioni, vedere Improved C++ IntelliCode now Ships with Visual Studio 2019 (IntelliCode di C++ è stato migliorato ed è ora disponibile con Visual Studio 2019).

IntelliCode usa il proprio training completo e il contesto di codice per inserire ciò che è più probabile usare nella parte superiore dell'elenco di completamento. Spesso riesce a eliminare la necessità di scorrere l'elenco verso il basso. Per C++, IntelliCode si rivela di massima utilità quando si usano le librerie più comuni, come la libreria standard.

Le nuove funzionalità di IntelliCode (modelli personalizzati, supporto C++ e inferenza EditorConfig) sono disabilitate per impostazione predefinita. Per abilitarli, passare a Strumenti > Opzioni > IntelliCode > Generale. Questa versione di IntelliCode è migliorata in termini di precisione e include il supporto per le funzioni libere. Per altre informazioni, vedere AI-Assisted Code Completion Suggestions Come to C++ via IntelliCode (Suggerimenti di completamento del codice con supporto per intelligenza artificiale disponibili in C++ tramite IntelliCode).

Miglioramenti rapidi delle informazioni

Miglioramenti generali

  • La barra modelli può immettere voci nel menu a discesa in base alla creazione di istanze del modello specifico nella codebase.

  • Lampadine per direttive mancanti #include che vcpkg può installare e il completamento automatico dei pacchetti disponibili per la direttiva CMake find_package .

  • La pagina delle proprietà generale per i progetti C++ è stata modificata. Alcune opzioni sono ora elencate in una nuova pagina Avanzate . La pagina Avanzate include anche nuove proprietà per l'architettura preferita del set di strumenti, le librerie di debug, la versione secondaria del set di strumenti MSVC e le build di Unity (jumbo).

Supporto per CMake

  • È stata aggiornata la versione di CMake fornita con Visual Studio alla versione 3.14. Questa versione aggiunge il supporto integrato per i generatori MSBuild destinati a progetti di Visual Studio 2019, nonché API di integrazione IDE basate su file.

  • Sono stati aggiunti miglioramenti all'editor delle impostazioni di CMake, incluso il supporto per sottosistema Windows per Linux (WSL) e le configurazioni delle cache esistenti, le modifiche alle radici di compilazione e installazione predefinite e il supporto per le variabili di ambiente nelle configurazioni di Linux CMake.

  • I completamenti e le informazioni rapide per i comandi, le variabili e le proprietà CMake predefiniti semplificano la CMakeLists.txt modifica dei file.

  • È stato integrato il supporto per la modifica, la compilazione e il debug di progetti CMake con Clang/LLVM. Per altre informazioni, vedere Clang/LLVM Support in Visual Studio (Supporto per Clang/LLVM in Visual Studio).

Linux e il sottosistema Windows per Linux

Analisi codice

Compilazioni remote

  • Gli utenti possono ora separare il computer di compilazione remoto dal computer di debug remoto quando la destinazione è Linux in progetti MSBuild e CMake.

  • La registrazione migliorata per le connessioni remote semplifica la diagnosi dei problemi nello sviluppo multipiattaforma.

Novità di C++ in Visual Studio versione 16.0

Per un riepilogo delle nuove funzionalità e delle correzioni di bug in Visual Studio versione 16.0, vedere Novità di Visual Studio 2019 versione 16.0.

Compilatore C++

  • Supporto ottimizzato per le funzionalità di C++17 e le correzioni di correttezza e supporto sperimentale per le funzionalità di C++20 come i moduli e le coroutine. Per informazioni dettagliate, vedere Miglioramenti della conformità di C++ in Visual Studio 2019.

  • L'opzione /std:c++latest include ora funzionalità C++20 che non sono necessariamente complete, incluso il supporto iniziale per l'operatore <=> C++20 ("astronave") per il confronto a tre vie.

  • L'opzione /Gm del compilatore C++ è ora deprecata. Provare a disabilitare l'opzione /Gm negli script di compilazione se è definita in modo esplicito. Tuttavia è anche possibile ignorare l'avviso di funzionalità deprecata per /Gm, perché non viene considerato un errore quando si usa l'opzione "Considera gli avvisi come errori" (/WX).

  • Con l'avvio dell'implementazione di funzionalità da parte di MSVC dalla bozza standard di C++ 20 nel flag /std:c++latest, /std:c++latest è incompatibile con /clr (tutte le versioni), /ZW e /Gm. In Visual Studio 2019 usare le modalità /std:c++17 oppure /std:c++14 durante la compilazione con /clr, /ZW o /Gm (ma vedere il punto elenco precedente).

  • Non vengono più generate intestazioni precompilate per app desktop e console C++ per impostazione predefinita.

Codegen, sicurezza, diagnostica e controllo delle versioni

Analisi migliorata con /Qspectre per fornire assistenza di mitigazione per Spectre Variant 1 (CVE-2017-5753). Per altre informazioni, vedere Spectre mitigations in MSVC (Mitigazioni Spectre in MSVC).

Miglioramenti della libreria standard di C++

  • Implementazione di altre funzionalità delle librerie di C++17 e C++20 e correzioni di correttezza. Per informazioni dettagliate, vedere Miglioramenti della conformità di C++ in Visual Studio 2019.

  • È stato applicato il formato Clang alle intestazioni della libreria standard di C++ per migliorare la leggibilità.

  • Poiché Visual Studio supporta ora Just My Code per C++, la libreria standard non deve più fornire un sistema personalizzato affinché std::function e std::visit ottengano lo stesso effetto. La rimozione del sistema non ha alcun effetto visibile per l'utente, Un'eccezione è che il compilatore non produrrà più la diagnostica che indica problemi nella riga 15732480 o 16707566 di <type_traits> o <variant>.

Miglioramenti di prestazioni/velocità effettiva nel compilatore e nella libreria standard

  • Miglioramenti relativi alla velocità effettiva di compilazione, tra cui il modo in cui il linker gestisce l'I/O dei file e la fase di collegamento durante l'unione e la creazione di tipi PDB.

  • È stato aggiunto il supporto di base per la vettorializzazione SIMD di OpenMP. È possibile abilitarla usando la nuova opzione /openmp:experimental del compilatore. Questa opzione permette la potenziale vettorializzazione dei cicli annotati con #pragma omp simd. La vettorializzazione non è garantita e per i cicli con annotazioni ma non vettorializzati verrà restituito un avviso. Nessuna clausola SIMD è supportata. Vengono ignorate e viene segnalato un avviso.

  • È stata aggiunta la nuova opzione della riga di comando /Ob3 per l'incorporamento, che è una versione più aggressiva dell'opzione /Ob2. /O2 (ottimizzazione dei dati binari per la velocità) implica comunque /Ob2 per impostazione predefinita. Se l'inlining del compilatore non è abbastanza aggressivo, provare a passare a /O2 -Ob3.

  • È stato aggiunto il supporto per le funzioni intrinseche Short Vector Math Library (SVML). Queste funzioni calcolano gli equivalenti dei vettori a 128, 256 o 512 bit. Sono stati aggiunti per supportare la vettorizzazione manuale dei cicli con chiamate alle funzioni della libreria matematica e alcune altre operazioni come la divisione integer. Per le definizioni delle funzioni supportate, vedere la guida alle funzioni intrinseche Intel.

  • Ottimizzazioni nuove e migliorate:

    • Semplificazioni aritmetiche e a riduzione costante per le espressioni tramite funzioni intrinseche vettoriali SIMD per formati sia a virgola mobile che interi.

    • Analisi più potente per l'estrazione di informazioni dal flusso di controllo (istruzioni if/else/switch) per rimuovere i rami sempre dimostrati come true o false.

    • Introduzione di memset migliorati per l'uso di istruzioni vettoriali SSE2.

    • Rimozione migliorata di copie di coppie struct/classe inutili, in particolare per programmi C++ con passaggio di parametri per valore.

    • Maggiore ottimizzazione del codice tramite memmove, ad esempio la costruzione di std::copy o di std::vector e std::string.

  • La progettazione fisica della libreria standard è stata ottimizzata per evitare la compilazione di parti della libreria standard non direttamente incluse. Questa modifica riduce il tempo di compilazione di un file vuoto che include solo <vector> in metà. Di conseguenza potrebbe essere necessario aggiungere direttive #include per le intestazioni in precedenza incluse indirettamente. Ad esempio, il codice che usa std::out_of_range potrebbe ora dover aggiungere #include <stdexcept>. Il codice che usa un operatore di inserimento del flusso potrebbe ora dover aggiungere #include <ostream>. Il vantaggio è che solo le unità di conversione che usano <stdexcept> effettivamente o <ostream> i componenti pagano il costo della velocità effettiva per compilarli.

  • if constexpr è stato applicato in più posizioni nella libreria standard per garantire un aumento della velocità effettiva e una riduzione delle dimensioni del codice nelle operazioni di copia, in permutazioni come l'inversione e la rotazione e nella libreria di algoritmi paralleli.

  • La libreria standard usa ora if constexpr internamente per ridurre i tempi di compilazione anche in modalità C++14.

  • Il rilevamento del collegamento dinamico del runtime per la libreria di algoritmi paralleli non usa più una pagina intera per archiviare la matrice del puntatore a funzione. Non è più considerato rilevante ai fini della sicurezza contrassegnare questa memoria come di sola lettura.

  • Il std::thread costruttore non attende più l'avvio del thread e non inserisce più così tanti livelli di chiamate di funzione tra la libreria _beginthreadex C sottostante e l'oggetto chiamabile fornito. In precedenza std::thread inserire sei funzioni tra _beginthreadex e l'oggetto chiamabile fornito. Questo numero è stato ridotto a soli tre, due dei quali sono solo std::invoke. Questa modifica risolve anche un bug di intervallo oscuro, in cui un std::thread costruttore smetteva di rispondere se l'orologio di sistema cambiava al momento esatto della std::thread creazione.

  • È stata corretta una regressione delle prestazioni in std::hash introdotta durante l'implementazione di std::hash<std::filesystem::path>.

  • La libreria standard usa ora distruttori anziché blocchi catch in varie posizioni per ottenere la correttezza. Questa modifica comporta un'interazione migliore con il debugger: le eccezioni generate tramite la libreria standard nelle posizioni interessate ora vengono visualizzate come generate dal sito di generazione originale, anziché essere rigenerate. Non tutti i blocchi catch della libreria standard sono stati eliminati. Si prevede che il numero di blocchi catch venga ridotto nelle versioni successive di MSVC.

  • Codegen non ottimale in std::bitset causato da un'eccezione condizionale all'interno di una noexcept funzione è stato risolto eseguendo il factoring del percorso di generazione.

  • Le famiglie std::list e std::unordered_* usano iteratori non di debug internamente in più posizioni.

  • Alcuni membri di std::list sono stati modificati per riutilizzare i nodi elenco laddove possibile, anziché deallocandoli e riallocandoli. Ad esempio, data una list<int> dimensione pari a 3, una chiamata a assign(4, 1729) ora sovrascrive i int valori nei primi tre nodi di elenco e alloca un nuovo nodo elenco con il valore 1729.

  • Tutte le chiamate della libreria standard a erase(begin(), end()) sono state modificate in clear().

  • std::vector inizializza e cancella ora gli elementi in modo più efficiente in alcuni casi.

  • Sono stati apportati miglioramenti a std::variant per renderlo più adatto all'utilità di ottimizzazione e generare così un codice migliore. Miglioramento dell'inlining del codice con std::visit.

IDE C++

Supporto di Live Share per C++

Live Share ora supporta C++, consentendo agli sviluppatori che usano Visual Studio o Visual Studio Code di collaborare in tempo reale. Per altre informazioni, vedere Annuncio di Live Share per C++: condivisione e collaborazione in tempo reale

IntelliSense per i modelli

La barra dei modelli usa ora l'interfaccia utente Finestra di anteprima invece di una finestra modale, supporta modelli annidati e immette in anticipo tutti gli argomenti predefiniti in Finestra di anteprima. Per altre informazioni, vedere Template IntelliSense Improvements for Visual Studio 2019 Preview 2 (Miglioramenti di IntelliSense per i modelli per Visual Studio 2019 Preview 2). Un elenco a discesa Usati di recente nella Barra modelli consente di passare rapidamente da un set precedente di argomenti di esempio a un altro.

Nuova esperienza di finestra iniziale

Quando si avvia l'IDE, viene visualizzata una nuova finestra start. Include opzioni per aprire progetti recenti, clonare il codice dal controllo del codice sorgente, aprire il codice locale come soluzione o una cartella o creare un nuovo progetto. La finestra di dialogo Nuovo progetto è stata anche migliorata con l'esperienza filtrabile delle funzionalità di ricerca.

Nuovi nomi per alcuni modelli di progetto

Sono stati modificati diversi nomi e descrizioni dei modelli di progetto per adattarli alla finestra di dialogo Nuovo progetto aggiornata.

Diversi miglioramenti della produttività

Visual Studio 2019 include le funzionalità seguenti che renderanno la codifica più semplice e intuitiva:

  • Correzioni rapide per:
    • Aggiungi mancante #include
    • NULL a nullptr
    • Aggiunta del punto e virgola mancante
    • Risoluzione dello spazio dei nomi o dell'ambito mancante
    • Sostituire gli operandi di riferimento indiretto non valido (* da e & & a *)
  • Informazioni rapide su un blocco tramite il passaggio del puntatore sulla parentesi di chiusura
  • Anteprima file di codice/intestazione
  • Passare a Definizione all'apertura #include del file

Per altre informazioni, vedere C++ Productivity Improvements in Visual Studio 2019 Preview 2 (Miglioramenti della produttività di C++ in Visual Studio 2019 Preview 2).

Supporto per CMake

  • Supporto per CMake 3.14

  • Visual Studio può ora aprire cache di CMake esistenti generate da strumenti esterni, come CMakeGUI, sistemi di meta-compilazione personalizzati o script di compilazione che richiamano cmake.exe.

  • Prestazioni di IntelliSense migliorate.

  • Un nuovo editor delle impostazioni offre un'alternativa alla modifica manuale del file CMakeSettings.json e una certa parità con CMakeGUI.

  • Visual Studio permette il bootstrap dello sviluppo di C++ con CMake su Linux rilevando se è presente una versione di CMake compatibile nel computer Linux. In caso contrario, propone di installarla.

  • Le impostazioni non compatibili in CMakeSettings, ad esempio le architetture non corrispondenti o le impostazioni del generatore CMake non compatibili, mostrano linee a zigzag nell'editor JSON e restituiscono errori nell'elenco degli errori.

  • La toolchain vcpkg viene automaticamente rilevata e abilitata per i progetti CMake aperti nell'IDE una volta eseguito vcpkg integrate install. Questo comportamento può essere disattivato specificando un file di toolchain vuoto in CMakeSettings.

  • I progetti CMake permettono ora il debug Just My Code per impostazione predefinita.

  • Gli avvisi di analisi statica vengono ora elaborati in background e visualizzati nell'editor per i progetti CMake.

  • Messaggi "begin" ed "end" di compilazione e configurazione più chiari per i progetti CMake e il supporto per l'interfaccia utente dello stato di compilazione di Visual Studio. Inoltre, è ora disponibile un'impostazione di dettaglio CMake in Opzioni strumenti > per personalizzare il livello di dettaglio dei messaggi di compilazione e configurazione di CMake nella finestra di output.

  • L'impostazione cmakeToolchain è ora supportata in CMakeSettings.json per specificare toolchain senza modificare manualmente la riga di comando di CMake.

  • Nuova scelta rapida da tastiera CTRL+MAIUSC+B del menu Compila tutto.

Integrazione‎ di IncrediBuild

IncrediBuild è ora incluso come componente facoltativo nel carico di lavoro Sviluppo di applicazioni desktop con C++. Build Monitor di IncrediBuild è completamente integrato nell'IDE di Visual Studio. Per altre informazioni, vedere Visualizzare la compilazione con Build Monitor di IncrediBuild e Visual Studio 2019.

Debug

  • Per le applicazioni C++ in esecuzione in Windows, i file PDB vengono ora caricati in un processo a 64 bit separato. Questa modifica risolve un intervallo di arresti anomali causati dall'esaurimento della memoria del debugger. Ad esempio, quando si esegue il debug di applicazioni che contengono un numero elevato di moduli e file PDB.

  • La ricerca è abilitata nelle finestre Espressioni di controllo, Auto e Variabili locali.

Sviluppo per Windows Desktop con C++

  • Queste procedure guidate ATL/MFC per C++ non sono più disponibili:

    • Creazione guidata componente ATL COM+ 1.0
    • Creazione guidata componente ASP ATL
    • Creazione guidata provider OLE DB ATL
    • Creazione guidata pagina delle proprietà ATL
    • Creazione guidata consumer OLE DB ATL
    • Consumer ODBC MFC
    • Classe MFC da controllo ActiveX
    • Classe MFC da libreria di tipi.

    Il codice di esempio per queste tecnologie è archiviato in Microsoft Learn e nel repository GitHub VCSamples.

  • Windows 8.1 Software Development Kit (SDK) non è più disponibile nel programma di installazione di Visual Studio. È consigliabile aggiornare i progetti C++ alla versione più recente di Windows SDK. Se esiste una dipendenza rigida dalla versione 8.1, è possibile scaricare l'SDK dall'archivio di Windows SDK.

  • Windows XP non sarà più disponibile come destinazione per il set di strumenti C++ più recente. Windows XP come destinazione con le librerie e il compilatore MSVC a livello di Visual Studio 2017 è ancora supportato e l'SDK può essere installato tramite "Singoli componenti".

  • La documentazione sconsiglia fortemente l'uso di moduli di unione per la distribuzione del runtime di Visual C++. In questa versione è stato intrapreso il passaggio aggiuntivo di contrassegnare i moduli di unione (MSM) come deprecati. Provare a eseguire la migrazione della distribuzione centrale di VCRuntime da moduli di unione al pacchetto ridistribuibile.

Sviluppo di applicazioni per dispositivi mobili con C++ (Android e iOS)

Per impostazione predefinita, l'esperienza Android per C++ ora fa riferimento a Android SDK 25 e Android NDK 16b.

Set di strumenti della piattaforma Clang/C2

Il componente sperimentale Clang/C2 è stato rimosso. Usare il set di strumenti MSVC per la conformità agli standard C++ completa con /permissive- e /std:c++17 oppure la toolchain Clang/LLVM per Windows.

Analisi codice

Unit test

Il modello di progetto di test C++ gestito non è più disponibile. È possibile continuare a usare il framework di test C++ gestito nei progetti esistenti. Per i nuovi unit test, è consigliabile usare uno dei framework di test nativi per cui Visual Studio fornisce modelli (MSTest, Google Test) o il modello di progetto di test C# gestito.