Novità relative a Visual C++ in Visual Studio 2013
In questo documento vengono introdotte le funzionalità nuove e migliorate disponibili in Visual C++ in Visual Studio 2013.
Per informazioni su altre aggiunte in Visual Studio 2013, vedere Novità di Visual Studio 2013.
Supporto migliorato degli standard ISO C/C++
Compilatore
Supporta le seguenti funzionalità del linguaggio ISO C++11:
Argomenti di modello predefiniti per i modelli di funzione.
Operatori di conversione espliciti.
Funzioni eliminate.
Funzioni impostate come predefinite.*
Supporta le seguenti funzionalità del linguaggio ISO C99:
_Bool
Valori letterali composti.
Inizializzatori designati.
Combinazione di dichiarazioni con codice.
La conversione di valori letterali stringa in valori modificabili può essere impedita tramite la nuova opzione del compilatore /Zc:strictStrings.In C++98, la conversione dai valori letterali stringa in char * (e dai valori letterali stringa a caratteri "wide" in wchar_t *) è stata deprecata.In C++11 la conversione è stata rimossa completamente.Sebbene il compilatore potrebbe essere strettamente conforme allo standard, fornisce invece l'opzione /Zc:strictStrings in modo da poter controllare la conversione.Per impostazione predefinita, l'opzione non è attiva.Si noti che quando si utilizza questa opzione in modalità debug, STL non verrà compilato.
Cast di riferimento rvalue/lvalue. Con i riferimenti rvalue, C++11 è in grado di distinguere chiaramente tra lvalue e rvalue.In precedenza, il compilatore di Visual C++ non ha fornito questa opzione negli scenari di cast specifici.È stata aggiunta una nuova opzione del compilatore /Zc:rvalueCast per rendere il compilatore conforme a quanto indicato nel Documento di lavoro del linguaggio C++(vedere la sezione 5.4, [expr.cast]/1).
Il comportamento predefinito quando questa opzione non è specificata è uguale a quello in Visual Studio 2012.
[!NOTA]
* Per le funzioni impostate come predefinite, l'utilizzo di =default per richiedere i costruttori di spostamento membro e gli operatori di assegnazione di spostamento non è supportato.
Librerie C99
Le dichiarazioni e le implementazioni vengono aggiunte per le funzioni mancanti in queste intestazioni: math.h, ctype.h, wctype.h, stdio.h, stdlib.h e wchar.h.Vengono inoltre aggiunte le nuove intestazioni complex.h, stdbool.h, fenv.h e inttypes.h, nonché implementazioni per tutte le funzioni dichiarate in esse.Sono disponibili nuove intestazioni del wrapper C++ (ccomplex, cfenv, cinttypes, ctgmath) e diverse altre sono state aggiornate (ccomplex, cctype, clocale, cmath, cstdint, cstdio, cstring, cwchar e cwctype).Per ulteriori informazioni, vedere il Supporto della libreria C99 in Visual Studio 2013.
Libreria di modelli standard
Supporto per gli operatori di conversione esplicita C++11, gli elenchi di inizializzatori, le enumerazioni con ambito e i modelli variadic.
Tutti i contenitori supportano ora requisiti di elementi C++11 precisi.
Supporto per queste funzionalità C++14:
"Funtori di operatori trasparenti" less<>, greater<>, plus<>, multiplies<> e così via.
make_unique<T>(args...) e make_unique<T[]>(n)
Funzioni non membro cbegin()/cend(), rbegin()/rend() e crbegin()crend().
<atomic> ha ricevuto numerosi miglioramenti delle prestazioni.
<type_traits> ha ricevuto importanti correzioni del codice e della stabilizzazione.
Modifiche di interruzione
Questo supporto migliorato per gli standard ISO C/C++ può richiedere modifiche al codice esistente in modo che sia conforme a C++11 e venga compilato correttamente in Visual C++ in Visual Studio 2013.Per ulteriori informazioni, vedere Ultime modifiche in Visual C++.
Per ulteriori informazioni sul nuovo linguaggio e sulle funzionalità STL C++11/14, vedere Supporto delle funzionalità C++11 (C++ moderno) e Funzionalità STL C++11/14, correzioni e modifiche importanti in Visual Studio 2013
Miglioramenti della libreria di Visual C++
È stato aggiunto C++ REST SDK.Include un'implementazione C++ moderna dei servizi REST.Per ulteriori informazioni, vedere C++ REST SDK.
Il supporto trama di C++ AMP è stato migliorato.Ora include il supporto per le mipmap e le nuove modalità di campionamento.
Le attività PPL supportano più tecnologie di pianificazione e il debug asincrono.Le nuovi API consentono la creazione di attività PPL per risultati normali e condizioni di eccezione.
Prestazioni delle applicazioni C++
La Vettorizzazione automatica riconosce e ottimizza ora più modelli C++ per rendere più rapida l'esecuzione del codice.
Miglioramenti della qualità del codice della piattaforma ARM e della microarchitettura Atom.
Viene aggiunta la convenzione di chiamata**__vectorcall**.Passare gli argomenti di tipo di vettore utilizzando la convenzione di chiamata __vectorcall per utilizzare i registri vettoriali.
Nuove opzioni del linker. Le opzioni /Gw (compilatore) e /Gy (assembler) consentono le ottimizzazioni del linker per produrre binari più efficienti.
Supporto della memoria condivisa di C++ AMP per ridurre o eliminare le operazioni di copia dei dati tra la CPU e la GPU.
Miglioramenti dell'Ottimizzazione PGO:
Miglioramenti delle prestazioni da una riduzione nel working set di applicazioni ottimizzate tramite PGO.
Nuova PGO per lo sviluppo di applicazioni Windows Store.
Supporto per lo sviluppo di applicazioni Windows Store
Supporto per tipi boxed in struct di valore. Ora è possibile definire i tipi di valore utilizzando i campi che è possibile impostare come null, ad esempio, IBox<int>^ anziché int.Ciò significa che i campi possono avere un valore oppure essere uguali a nullptr.
Informazioni dettagliate sulle eccezioni. C++/CX supporta il nuovo modello di errore Windows che consente di acquisire e propagare informazioni dettagliate sulle eccezioni tramite l'interfaccia applicativa binaria (ABI); sono inclusi gli stack di chiamate e le stringhe di messaggio personalizzate.
Object::ToString() ora è virtuale. È ora possibile eseguire l'override di ToString in tipi di riferimento di Windows Runtime definiti dall'utente.
Supporto per le API deprecate. Le API pubbliche di Windows Runtime possono ora essere contrassegnate come deprecate ed essere dotate di un messaggio personalizzato che viene visualizzato come avviso di compilazione. Possono inoltre fornire linee guida sulla migrazione.
Miglioramenti del debugger. Supporto per il debug di interoperabilità JavaScript/nativo, la diagnostica delle eccezioni di Windows Runtime e il debug del codice asincrono (sia in Windows Runtime che nella libreria PPL).
[!NOTA]
Oltre alle funzionalità e ai miglioramenti specifici di C++ descritti in questa sezione, altri miglioramenti in Visual Studio consentono, inoltre, di scrivere meglio le applicazioni Windows Store.Per informazioni dettagliate su queste funzionalità, vedere Guida alle funzionalità di Windows 8.1.Per ulteriori informazioni sui nuovi modelli di applicazioni, vedere Modelli di progetto C#, VB e C++ per le applicazioni Windows Store.Per un elenco delle nuove funzionalità della piattaforma, vedere Windows 8.1 Preview: nuove API e funzionalità.
Miglioramenti della diagnostica
Miglioramenti del debugger. Supporto per il debug asincrono e il debug Just My Code.
Categorie di analisi del codice. È ora possibile visualizzare l'output per categoria dall'analizzatore di codice per rilevare e correggere i difetti del codice.
Diagnostica XAML. È ora possibile diagnosticare problemi di utilizzo della batteria e di velocità di risposta interfaccia utente nel codice XAML.
Miglioramenti della grafica e del debug della GPU.
Acquisizione remota e riproduzione su dispositivi reali.
Debug simultaneo della CPU e di C++ AMP.
Diagnostica migliorata del runtime di C++ AMP.
Debug di traccia del compute shader HLSL.
Miglioramenti della grafica tridimensionale
Supporto Pipeline contenuto immagine per il formato DDS alfa premoltiplicato.
L'Editor immagini utilizza il valore alfa premoltiplicato internamente per il rendering e quindi evita il rendering degli elementi come aloni scuri.
Editor modelli e immagini. La creazione di filtri definiti dall'utente è supportata in Progettazione shader nell'editor immagini e nell'editor modelli.
IDE e produttività
L'IDE di Visual Studio include miglioramenti significativi che consentono di migliorare la produttività quando si crea codice in C++.
Formattazione codice migliorata. È possibile applicare più impostazioni di formattazione al codice C++.Utilizzando queste impostazioni, è possibile controllare il posizionamento di una nuova riga mediante parentesi graffe e parole chiave, rientro, spaziatura e ritorno a capo delle righe. Il codice verrà formattato automaticamente dopo aver completato le istruzioni e i blocchi e dopo aver incollato il codice in un file.Per modificare le impostazioni di formattazione, sulla barra dei menu in Visual Studio scegliere Strumenti, Opzioni, espandere i nodi Editor di testo, C/C++ e Formattazione, quindi apportare le modifiche.È inoltre possibile utilizzare la casella Avvio veloce per accedere a queste opzioni.
Completamento parentesi graffa. Il codice C++ completa ora in modo automatico la chiusura dei caratteri che corrispondono ai seguenti caratteri di apertura:
{ (parentesi graffa)
[ (parentesi quadra)
( (parentesi)
' (virgoletta singola)
" (virgolette)
Funzionalità aggiuntive di completamento automatico di C++.
Aggiunge il punto e virgola per i tipi di classe.
Completa le parentesi per i valori letterali stringa di tipo "raw".
Completa i commenti a più righe (/* */)
Trova tutti i riferimenti ora risolve e filtra automaticamente i riferimenti in background dopo aver visualizzato l'elenco delle corrispondenze testuali. Per disabilitare la risoluzione dei riferimenti, sulla barra dei menu in Visual Studio scegliere Strumenti, Opzioni, espandere i nodi Editor di testo, C/C++ e Avanzate, quindi modificare l'impostazione Disabilita risoluzione in Riferimenti.
Per modificare le impostazioni di completamento delle parentesi graffe, sulla barra dei menu in Visual Studio scegliere Strumenti, Opzioni, espandere i nodi Editor di testo, C/C++ e Generali, quindi apportare le modifiche.È inoltre possibile modificare le impostazioni per tutti i linguaggi di Visual Studio espandendo i nodi Editor di testo, Tutti i linguaggi e Generali.
Per modificare impostazioni di C++ specifiche, sulla barra dei menu scegliere Strumenti, Opzioni, espandere i nodi Editor di testo, C/C++ e Avanzate, quindi apportare le modifiche.
Filtro elenco di membri basato sul contesto. I membri inaccessibili vengono filtrati dagli elenchi di membri IntelliSense. Ad esempio, i membri privati non vengono visualizzati nell'elenco dei membri a meno che non si stia modificando il codice che implementa il tipo.Quando l'elenco dei membri è aperto, è possibile premere CTRL+J per rimuovere un livello di filtro (si applica solo alla finestra dell'elenco dei membri corrente).È possibile premere nuovamente CTRL+J per rimuovere il filtro testuale e per visualizzare ogni membro.
Scorrimento della Guida ai parametri. La firma della funzione visualizzata nella descrizione comando della Guida ai parametri cambia in base al numero di parametri effettivamente immessi, anziché visualizzare solo una firma arbitraria e non aggiornarla in base al contesto corrente.La Guida ai parametri è utile anche quando viene visualizzata sulle funzioni annidate.
Attiva/disattiva file di codice/intestazione. È ora possibile passare da un'intestazione al corrispondente file di codice utilizzando un comando del menu di scelta rapida o un tasto di scelta rapida.
Finestra delle proprietà del progetto C++ ridimensionabile.
Generazione automatica del codice del gestore eventi in C++/CX e C++/CLI. Quando si digita il codice per aggiungere un gestore eventi in un file di codice C++/CX o C++/CLI, l'editor può generare automaticamente la definizione del gestore eventi e l'istanza del delegato.Quando il codice del gestore eventi può essere generato automaticamente, viene visualizzata una finestra di descrizione comando.
Miglioramento della compatibilità con DPI. L'impostazione di compatibilità con DPI per i file manifesto dell'applicazione supporta ora l'impostazione "Per monitor compatibilità DPI avanzata".
Cambio di configurazione più rapido. Per le applicazioni di grandi dimensioni, il cambio di configurazioni (specialmente le operazioni di cambio successive) viene eseguito molto più rapidamente.
Efficienza in fase di compilazione.
- Compilazioni più veloci. Numerose ottimizzazioni e l'utilizzo multicore rendono le compilazioni più veloci, soprattutto per i progetti di grandi dimensioni.Anche le compilazioni incrementali per le applicazioni C++ con riferimenti a C++ WinMD sono molto più veloci.
Per informazioni su altre aggiunte e sui miglioramenti apportati all'IDE, vedere Novità di Visual Studio 2013 e gli altri articoli a cui fanno riferimento.