Condividi tramite


Novità di Visual C++ 2010

In questo documento vengono descritte le funzionalità di Visual C++ nuove e migliorate disponibili in Visual Studio 2010.

Compilatore e linker Visual C++

Parola chiave Auto

La parola chiave Auto ha un nuovo scopo. Utilizzare il significato predefinito della parola chiave auto per dichiarare una variabile il cui tipo viene dedotto dall'espressione di inizializzazione nella dichiarazione della variabile. L'opzione del compilatore /Zc:auto richiama il significato nuovo o precedente della parola chiave auto.

Identificatore di tipo decltype

L'identificatore di tipo decltype restituisce il tipo di un'espressione specificata. Utilizzare l'identificatore di tipo decltype in combinazione con la parola chiave auto per dichiarare un tipo complesso o noto solo al compilatore. Utilizzare ad esempio la combinazione per dichiarare una funzione di modello il cui tipo restituito dipende dai tipi degli argomenti di modello corrispondenti. In alternativa, dichiarare una funzione di modello che chiama un'altra funzione e quindi restituisce il tipo restituito della funzione chiamata.

Espressioni lambda

Le funzioni lambda dispongono di un corpo della funzione ma non di un nome. Le funzioni lambda combinano le migliori caratteristiche dei puntatori a funzione e degli oggetti funzione.

Utilizzare una funzione lambda da sola, come parametro della funzione di modello anziché come oggetto funzione, oppure in combinazione con la parola chiave auto per dichiarare una variabile il cui tipo è lambda.

Riferimento rvalue

Il dichiaratore di riferimento rvalue (&&) dichiara un riferimento a un rvalue. Un riferimento rvalue consente di utilizzare la semantica di spostamento e l'inoltro perfetto per scrivere in modo più efficace costruttori, funzioni e modelli.

Dichiarazione static_assert

Una dichiarazione static_assert esegue il test di un'asserzione software in fase di compilazione, a differenza di altri meccanismi di asserzione che eseguono il test in fase di esecuzione. Se l'asserzione non riesce, la compilazione ha esito negativo e viene fornito un messaggio di errore specificato.

Parole chiave nullptr e __nullptr

Il compilatore di Visual C++ consente di utilizzare la parola chiave nullptr con il codice nativo o con il codice gestito. La parola chiave nullptr indica che un handle dell'oggetto, un puntatore interno o il tipo di puntatore nativo non punta a un oggetto. nullptr viene interpretato dal compilatore come codice gestito quando si utilizza l'opzione del compilatore /clr e come codice nativo quando non si utilizza l'opzione /clr.

La parola chiave __nullptr specifica di Microsoft ha lo stesso significato di nullptr, ma si applica solo al codice nativo. Se si compila codice nativo C/C++ utilizzando l'opzione del compilatore /clr, il compilatore non può determinare se la parola chiave nullptr è un termine nativo o gestito. Per rendere più chiare le proprie intenzioni, utilizzare la parola chiave nullptr per specificare il termine gestito e __nullptr per specificare il termine nativo.

Opzione del compilatore /Zc:trigraphs

Per impostazione predefinita, il supporto dei trigrammi è disabilitato. Occorre utilizzare l'opzione del compilatore /Zc:trigraphs per abilitare il supporto dei trigrammi.

Un trigramma è costituito da due punti interrogativi consecutivi (??) seguiti da un terzo carattere univoco. Il compilatore sostituisce un trigramma con il carattere di punteggiatura corrispondente. Ad esempio, il compilatore sostituisce il trigramma ?? = con il simbolo di cancelletto (#). Utilizzare i trigrammi in file di origine C che utilizzano un set di caratteri che non contiene determinati caratteri di punteggiatura.

Nuova opzione di ottimizzazione PGO

PogoSafeMode è una nuova opzione per l'ottimizzazione PGO che consente di specificare se utilizzare la modalità sicura o la modalità veloce durante l'ottimizzazione dell'applicazione. La modalità sicura è thread-safe, ma è più lenta della modalità veloce. La modalità veloce rappresenta il comportamento predefinito.

Nuova opzione CLR (Common Language Runtime) /clr: nostdlib

È stata aggiunta una nuova opzione per /clr (compilazione Common Language Runtime). Se vengono incluse versioni diverse delle stesse librerie, viene generato un errore di compilazione. La nuova opzione consente di escludere le librerie CRL predefinite in modo che il programma possa utilizzare una versione specificata.

Nuova direttiva pragma detect_mismatch

La direttiva pragma detect_mismatch consente di inserire un tag nei file che viene confrontato con altri tag che hanno lo stesso nome. Se per lo stesso nome sono presenti più valori, il linker genera un errore.

Funzioni intrinseche XOP, FMA4 e LWP

Sono state aggiunte nuove funzioni intrinseche per supportare le tecnologie del processore Oggetti intrinseci XOP aggiunti per Visual Studio 2010 SP1, Oggetti intrinseci FMA4 aggiunti per Visual Studio 2010 SP1 e Oggetti intrinseci LWP aggiunti per Visual Studio 2010 SP1. Per determinare quali tecnologie del processore sono supportate in un determinato computer, utilizzare __cpuid, __cpuidex.

Progetti C++ e sistema di compilazione

MSBuild

MSBuild.exe ha sostituito VCBuild.exe per la compilazione di soluzioni e progetti Visual C++. MSBuild è lo stesso strumento di compilazione basato su XML, flessibile ed estensibile utilizzato dagli altri linguaggi e tipi di progetto di Visual Studio. Ne deriva che i file di progetto di Visual C++ utilizzano ora un formato di file XML e con estensione vcxproj. I file di progetto di Visual C++ creati in versioni precedenti di Visual Studio vengono convertiti automaticamente nel nuovo formato di file. Per ulteriori informazioni, vedere MSBuild (Visual C++).

Directory di VC++

L'impostazione relativa alle directory di VC++ è ora disponibile in due posizioni. Utilizzare le pagine delle proprietà del progetto per impostare i valori per progetto per le directory di VC++. Utilizzare Gestione proprietà e una finestra delle proprietà per impostare valori per configurazione globali per le directory di VC++.

Dipendenze da progetto a progetto

Nelle versioni precedenti le dipendenze definite tra progetti vengono archiviate nel file di soluzione. Quando queste soluzioni vengono convertite nel nuovo formato di file di progetto, le dipendenze vengono convertite in riferimenti da progetto a progetto. Questa modifica può influire sulle applicazioni, in quanto i concetti di dipendenza della soluzione e riferimento da progetto a progetto sono diversi.

Macro e variabili di ambiente

La nuova macro _ITERATOR_DEBUG_LEVEL richiama il supporto di debug per gli iteratori. Utilizzare questa macro anziché le macro _SECURE_SCL e _HAS_ITERATOR_DEBUGGING precedenti.

Librerie di Visual C++

Librerie di runtime di concorrenza

Il framework del runtime di concorrenza supporta applicazioni e componenti che vengono eseguiti simultaneamente e consente di programmare le applicazioni concorrenti in Visual C++. Per supportare la programmazione di applicazioni concorrenti, la libreria PPL (Parallel Patterns Library) fornisce contenitori e algoritmi generali per l'esecuzione di un parallelismo accurato. La Libreria di agenti asincroni fornisce un modello di programmazione basato su attori e le interfacce per il passaggio dei messaggi per le attività di pipelining e per un flusso di dati meno accurato.

Libreria standard di C++

Nell'elenco riportato di seguito vengono descritte molte delle modifiche apportate alla libreria standard di C++.

  • La nuova funzionalità del linguaggio C++ riferimento rvalue è stata utilizzata per implementare la semantica di spostamento e l'inoltro perfetto per varie funzioni della libreria STL (Standard Template Library). La semantica di spostamento e l'inoltro perfetto migliorano significativamente le prestazioni delle operazioni che allocano o assegnano variabili o parametri.

  • I riferimenti rvalue vengono inoltre utilizzati per implementare la nuova classe unique_ptr, un tipo di puntatore intelligente più sicuro rispetto alla classe auto_ptr. La classe unique_ptr è mobile ma non copiabile, implementa una semantica di proprietà rigorosa senza influire sulla sicurezza e funziona senza problemi con i contenitori che riconoscono i riferimenti rvalue. La classe auto_ptr è obsoleta.

  • All'intestazione <algorithm> sono state aggiunte 15 nuove funzioni, ad esempio find_if_not, copy_if e is_sorted.

  • Nell'intestazione <memory> è ora disponibile la nuova funzione make_shared, una soluzione pratica, affidabile ed efficiente per creare un puntatore condiviso per un oggetto al momento della costruzione dell'oggetto.

  • Gli elenchi collegati singolarmente sono supportati dall'intestazione <forward_list>.

  • Le nuove funzioni membro cbegin, cend, crbegin e crend forniscono un elemento const_iterator che consente di spostarsi in avanti o indietro in un contenitore.

  • L'intestazione <system_error> e i modelli correlati supportano l'elaborazione di errori di sistema di basso livello.

  • I membri della classe exception_ptr possono essere utilizzati per trasportare le eccezioni tra thread.

  • L'intestazione <codecvt> supporta la conversione di varie codifiche dei caratteri Unicode in altre codifiche.

  • L'intestazione <allocators> definisce diversi modelli che consentono di allocare e liberare blocchi di memoria per i contenitori basati su nodi.

  • Sono disponibili numerosi aggiornamenti per l'intestazione <random>.

Libreria MFC (Microsoft Foundation Class)

Funzionalità di Windows 7

MFC supporta molte funzionalità di Windows 7, ad esempio l'interfaccia utente della barra multifunzione, la barra delle applicazioni, le Jump List, le anteprime a schede, le anteprime, l'indicatore di stato, la sovrapposizione di icone e l'indicizzazione della ricerca. Poiché MFC supporta automaticamente molte funzionalità di Windows 7, è possibile che l'applicazione esistente non richieda modifiche. Per supportare altre funzionalità nelle nuove applicazioni, utilizzare la Creazione guidata applicazione MFC per specificare le funzionalità desiderate.

Riconoscimento del multitocco

MFC supporta applicazioni con un'interfaccia utente multitocco, ad esempio le applicazioni scritte per il sistema operativo Microsoft Surface. Un'applicazione multitocco può gestire messaggi di tocco e di movimento, ovvero combinazioni di messaggi di tocco, di Windows. È sufficiente registrare l'applicazione per gli eventi tocco e movimento per fare in modo che il sistema operativo inoltri gli eventi multitocco ai gestori eventi.

Riconoscimento di valori DPI alti

Per impostazione predefinita, le applicazioni MFC dispongono ora del riconoscimento di valori DPI alti. Se un'applicazione riconosce valori DPI (punti per pollice) alti, il sistema operativo può adattare le finestre, il testo e altri elementi dell'interfaccia utente alla risoluzione corrente dello schermo. Il layout dell'immagine adattata risulterà probabilmente corretto, senza troncature o effetti pixel.

Gestione riavvio

Gestione riavvio consente di salvare automaticamente i documenti e di riavviare l'applicazione in caso di chiusure o riavvii imprevisti. È ad esempio possibile utilizzare Gestione riavvio per avviare l'applicazione in seguito alla chiusura causata da un aggiornamento automatico. Per ulteriori informazioni sulla configurazione dell'applicazione per l'utilizzo di Gestione riavvio, vedere Procedura: aggiungere il supporto di Gestione riavvio.

CTaskDialog

È possibile utilizzare la classe CTaskDialog al posto della finestra di messaggio standard AfxMessageBox. La classe CTaskDialog consente di visualizzare e raccogliere più informazioni rispetto alla finestra di messaggio standard.

Libreria SafeInt

La nuova libreria SafeInt esegue operazioni aritmetiche sicure che tengono conto dell'overflow degli interi. Questa libreria esegue inoltre il confronto tra generi diversi di Integer.

Nuove macro ATL (Active Template Library)

In ATL sono state aggiunte nuove macro per espandere le funzionalità di PROP_ENTRY_TYPE e PROP_ENTRY_TYPE_EX. PROP_ENTRY_INTERFACE e PROP_ENTRY_INTERFACE_EX consentono di aggiungere un elenco di CLSID validi. PROP_ENTRY_INTERFACE_CALLBACK e PROP_ENTRY_INTERFACE_CALLBACK_EX consentono di specificare una funzione di callback per determinare se un CLSID è valido.

Avvisi /analyze

La maggior parte degli avvisi /analyze (analisi del codice a livello aziendale) è stata rimossa dalle librerie CRT, MFC e ATL.

Supporto per le animazioni e D2D

MFC supporta ora l'animazione e la grafica Direct2D. La libreria MFC contiene diverse nuove classi e funzioni MFC per supportare queste funzionalità. Sono inoltre disponibili due procedure dettagliate per illustrare l'aggiunta di un oggetto D2D e di un oggetto animazione a un progetto. Si tratta delle procedure dettagliate seguenti: Procedura dettagliata: aggiunta di un oggetto D2D a un progetto MFC e Procedura dettagliata: aggiunta di animazione a un progetto MFC.

IDE

In Visual C++ 2010 l'ambiente di sviluppo integrato (IDE, Integrated Development Environment) presenta importanti miglioramenti in prestazioni, precisione, scalabilità e strumenti per aumentare la produttività.

Funzionalità IntelliSense migliorata

IntelliSense per Visual C++ è stato riprogettato completamente per offrire maggiore velocità, precisione ed efficienza nella gestione di progetti di grandi dimensioni. Per ottenere questi miglioramenti, nell'IDE viene fatta distinzione tra come lo sviluppatore visualizza e modifica il codice sorgente e come il codice sorgente e le impostazioni del progetto vengono utilizzate per compilare una soluzione.

A causa di questa separazione nelle operazioni, l'esplorazione di funzionalità quali Visualizzazione classi e la nuova finestra di dialogo Passa a è gestita da un sistema basato su un nuovo file di database desktop di SQL Server (con estensione sdf) che sostituisce il precedente file del browser senza compilazione (con estensione ncb). Le funzionalità IntelliSense quali Informazioni rapide, il completamento automatico e la guida ai parametri analizzano le unità di conversione solo quando necessario. Le funzionalità ibride come la nuova finestra Gerarchia di chiamata utilizzano una combinazione delle funzionalità di esplorazione e IntelliSense.

Poiché IntelliSense elabora sole le informazioni richieste al momento, l'IDE risponde più velocemente. Inoltre, le informazioni risultano più aggiornate e pertanto le visualizzazioni e le finestre dell'IDE sono più precise. Infine, grazie a una migliore organizzazione, a funzionalità più efficienti e a una maggiore scalabilità, l'infrastruttura dell'IDE è in grado di gestire progetti di maggiori dimensioni.

Segnalazione degli errori migliorata in IntelliSense

L'IDE è stata migliorata per quanto riguarda il rilevamento di errori che potrebbero provocare una perdita di IntelliSense. Gli errori vengono sottolineati con una linea ondulata rossa. Inoltre, grazie all'ambiente IDE, qualsiasi errore IntelliSense viene segnalato nella finestra Elenco errori. Pr visualizzare il codice che causa un problema, fare doppio clic sull'errore nella finestra Elenco errori.

Funzionalità di completamento automatico #include

Nell'IDE viene supportato il completamento automatico per la parola chiave #include. Quando si digita #include, viene creato un elenco a discesa di file di intestazione validi. Se si continua a digitare un nome di file, l'elenco viene filtrato in base all'immissione. In qualsiasi momento è possibile selezionare dall'elenco il file che si desidera includere. Ciò consente di includere rapidamente un file anche quando non se ne conosce il nome esatto.

Passa a

Nella finestra di dialogo Passa a è possibile cercare tutti i simboli e i file del progetto che corrispondono a una stringa specificata. I risultati della ricerca vengono rivisti immediatamente man mano che si digitano i caratteri della stringa di ricerca. Nel campo Risultati viene indicato il numero di elementi trovati e vengono fornite indicazioni sulla possibilità di limitare la ricerca. I campi Tipo/Ambito, Posizione e Anteprima consentono di evitare ambiguità tra elementi con nomi simili. È inoltre possibile estendere questa funzionalità per supportare altri linguaggi di programmazione.

Debug parallelo e profilatura

Il debugger di Visual Studio riconosce il runtime di concorrenza e consente di risolvere i problemi relativi alle applicazioni con elaborazione in parallelo. Con il nuovo strumento di profilatura della concorrenza è possibile visualizzare il comportamento generale dell'applicazione. È inoltre possibile utilizzare le nuove finestre degli strumenti per visualizzare lo stato delle attività e dei relativi stack di chiamate.

Finestra di progettazione della barra multifunzione

La finestra di progettazione della barra multifunzione è un editor grafico che consente di creare e modificare un'interfaccia utente della barra multifunzione MFC. L'interfaccia utente finale della barra multifunzione è rappresentata da un file di risorse basato su XML (con estensione mfcribbon-ms). Per le applicazioni esistenti, è possibile acquisire l'interfaccia utente della barra multifunzione corrente aggiungendo temporaneamente alcune righe di codice, quindi richiamando la finestra di progettazione della barra multifunzione. Dopo la creazione del file di risorse della barra multifunzione, è possibile sostituire il codice dell'interfaccia utente della barra multifunzione scritto personalmente con alcune istruzioni che caricano la risorsa della barra multifunzione.

Gerarchia di chiamata

La finestra Gerarchia di chiamata consente di passare a tutte le funzioni chiamate da una determinata funzione o a tutte le funzioni che chiamano una funzione specifica.

Strumenti

Creazione guidata classe MFC

In Visual C++ 2010 è stato reintrodotto l'apprezzato strumento Creazione guidata classe MFC. La Creazione guidata classe MFC è una soluzione comoda per aggiungere classi, messaggi e variabili a un progetto senza dover modificare manualmente insiemi di file di origine.

Creazione guidata controllo ATL

La Creazione guidata controllo ATL non popola più automaticamente il campo ProgID. Se un controllo ATL non dispone di un ProgID,, è possibile che altri strumenti non funzionino con tale controllo. Un esempio di strumento che richiede la presenza del campo ProgID nei controlli è la finestra di dialogo Inserisci controllo ActiveX. Per ulteriori informazioni sulla finestra di dialogo, vedere Finestra di dialogo Inserisci controllo ActiveX.

Riferimento a Microsoft Macro Assembler

L'aggiunta del tipo di dati YMMWORD supporta gli operandi multimediali a 256 bit inclusi nelle istruzioni AVX (Advanced Vector Extensions) di Intel.

Vedere anche

Concetti

Ultime modifiche in Visual C++

Altre risorse

Guida introduttiva a Visual C++ 2010