Digitare di nuovo a C++ (C++ moderno)

C++ è uno dei linguaggi di programmazione più ampiamente utilizzate nel mondo.I programmi ben scritta C++ sono rapidi ed efficienti.Il linguaggio è più flessibile di altri linguaggi in quanto è possibile utilizzarlo per creare il un'ampia gamma di applicazioni divertente e viene riprodotto emozionanti, al software scientifico a elevate prestazioni, i driver di periferica, i programmi compilati e le applicazioni client Windows.Per più di 20 anni, C++ veniva utilizzato per risolvere i problemi simili e molti altri.Elementi che non si conoscano è che un numero crescente di programmatori C++ hanno piegato la programmazione di tipo C sciatta di ieri e indossare C++ moderno anziché.

Uno dei requisiti originali per C++ è compatibilità con le versioni precedenti del linguaggio C.Da allora, C++ è evoluto con diverse iterazioni e c con le classi, la specifica del linguaggio di origine C++ e quindi i numerosi miglioramenti futuri.A causa di questa eredita, C++ viene spesso definito come linguaggio di programmazione multi-paradigma.In C++, è possibile eseguire la programmazione di tipo C completamente procedurale che include puntatori non elaborati, matrici, le stringhe di caratteri con terminazione null, le strutture di dati personalizzate e altre funzionalità che è possibile abilitare le dimensioni maggiori prestazioni ma è anche possibile generare i bug e la complessità.Poiché la programmazione di tipo C viene caricata di pericoli come questi, uno degli obiettivi fondanti per C++ è di solito programmi sia indipendenti dai tipi che più facile scrivere, estende e gestire.Nella fase iniziale, C++ è abbracciato i paradigmi di programmazione quali programmazione orientata a oggetti.Nel corso di anni, le funzionalità sono state aggiunte al linguaggio, insieme alle librerie standard alto - testing di strutture di dati e di algoritmi.È queste modifiche che hanno consentito lo stile moderno C++.

C++ moderno sottolinea:

  • Nell'ambito basato su stack invece dell'heap o dell'ambito globale statico.

  • Inferenza del tipo automatica anziché i nomi di tipo espliciti.

  • Puntatori intelligenti anziché puntatori non elaborati.

  • std::string e tipi di std::wstring (vedere) <string>alle matrici non elaborate di char[].

  • i contenitori diLibreria di modelli standard (STL) come vector, liste map alle matrici non elaborato o di contenitori personalizzati.Vedere <vector>, <list> e <map>.

  • Algoritmo STL anziché quelli manualmente codificati.

  • Eccezioni, creare e gestire le condizioni di errore.

  • Comunicazione senza blocco di tra thread utilizzando IL std::atomic<> (vedere <atomic>) anziché altri meccanismi di comunicazione tra il thread.

  • funzioni lambda inline anziché piccole funzioni implementate separatamente.

  • Basato sull'intervallo dei cicli dei cicli più affidabili eseguibili con le matrici, i contenitori STL e le raccolte di Windows Runtime nel form for (for-range-declaration:expression).Ciò fa parte del supporto linguistico principale.Per ulteriori informazioni, vedere Istruzione for basata su intervallo (C++).

Il linguaggio stesso C++ si è stato.Confrontare i frammenti di codice.Questo illustrato come le operazioni hanno utilizzato per essere in C++:

// circle and shape are user-defined types
circle* p = new circle( 42 ); 
vector<shape*> v = load_shapes();

for( vector<circle*>::iterator i = v.begin(); i != v.end(); ++i ) {
    if( *i && **i == *p )
        cout << **i << “ is a match\n”;
}

for( vector<circle*>::iterator i = v.begin();
        i != v.end(); ++i ) {
    delete *i; // not exception safe
}

delete p;

Di seguito viene illustrato come la stessa operazione viene eseguita in C++ moderno:

#include <memory>
#include <vector>
// ...
// circle and shape are user-defined types
auto p = make_shared<circle>( 42 );
vector<shared_ptr<shape>> v = load_shapes();

for_each( begin(v), end(v), [&]( const shared_ptr<shape>& s ) {
    if( s && *s == *p )
        cout << *s << " is a match\n";
} );

In C++ moderno, non è necessario utilizzare new/eliminazione o la gestione delle eccezioni esplicita perché è possibile utilizzare i puntatori intelligenti anziché.Quando si utilizza la deduzione e funzione lambdadel tipo di auto, è possibile scrivere codice rapidamente, lo stringete e lo comprendere meglio.E for_each viene pulita, più facile da utilizzare e a errori generati meno soggetto che un ciclo di for.È possibile utilizzare il boilerplate insieme alle righe di codice minima per scrivere l'applicazione.Ed eseguire il codice indipendente dalle eccezioni e memoria sicuro e non si dispone di allocazione e disallocazione o codici di errore da utilizzare con.

C++ moderno comprende due tipi di polimorfismo: fase di compilazione, con i modelli e il runtime, l'ereditarietà e virtualizzazione.È possibile combinare i due tipi di polimorfismo a grande effetto.Il modello shared_ptr STL utilizza i metodi interni virtuali per eseguire la cancellatura apparentemente che non richiede l'esecuzione di tipo.Ma non supporta la virtualizzazione di utilizzo sia per il polimorfismo quando un modello è la scelta migliore.I modelli possono essere molto efficaci.

Se si osservino a C++ da un altro linguaggio, specialmente da un linguaggio gestito in cui la maggior parte dei tipi sono tipi di riferimento e poche sono tipi di valore, sia che le classi C++ sono tipi di valore per impostazione predefinita.Ma è possibile specificarli come tipi di riferimento per abilitare il comportamento polimorfico la programmazione orientata a oggetti supportate.Una prospettiva utile: i tipi di valore sono più sulla memoria e il controllo di layout, tipi di riferimento è ulteriori informazioni sulle classi base e le funzioni virtuali per supportare il polimorfismo.Per impostazione predefinita, i tipi di valore sono copyable- vengano bloccati ogni ha un costruttore di copia o un operatore di assegnazione di copia.Quando si specifica un tipo di riferimento, impostare la classe non copiabile disabilitare l'assegnazione di copia e del costruttore di copia operatore- e utilizzare un distruttore virtuale, che supporta il polimorfismo.I tipi di valore sono anche sui contenuti, che, quando vengono copiati, forniscono due valori indipendenti che è possibile modificare separatamente.Ma i tipi di riferimento sono su aidentità- cui kind di oggetto includere e per questo motivo viene invece definito come tipi polimorfici.

C++ è in corso una rinascita perché la potenza ancora re.I linguaggi quali Java e il c sono possibili quando la produttività del programmatore è importante, ma mostrano le limitazioni alla potenza e le prestazioni sono preminenti.Per alta efficienza e la potenza, specialmente in dispositivi che hanno un'accessibilità l'hardware, non batte C++ moderno.

Non solo il linguaggio è moderno, gli strumenti di sviluppo, è possibile.Visual Studio rende tutte le parti del ciclo di sviluppo affidabili e efficienti.Include strumenti di gestione di (ALM) del ciclo di vita delle applicazioni, miglioramenti IDE quali IntelliSense, i meccanismi) semplici da utilizzare come XAML e compilare, eseguire il debug e molti altri strumenti.

Articoli in questa parte della documentazione per le linee guida e le procedure consigliate per le funzionalità più interessanti e le tecniche di alto livello per la scrittura di programmi moderni C++.

Vedere anche

Riferimenti

Espressioni lambda in C++

Altre risorse

Riferimenti al linguaggio C++

Riferimento della libreria C++ standard