Freigeben über


Willkommen zurück in C++ modernes (C++)

C++ ist eine der am häufigsten verwendeten Programmiersprachen in der Welt.Gut geschriebene C++-Programme sind schnell und effizient.Die Sprache ist flexibler als andere Sprachen, da Sie sie verwenden können, um eine breite Palette von Appvon fun und aufregende Spiele, zur leistungsstarken wissenschaftlichen Software, zu den Gerätetreibern, zu eingebetteten Programme und zu Windows-Client App zu erstellen.Für mehr als 20 Jahre ist C++ verwendet, um Probleme wie diese und viele andere zu lösen.Was Sie möglicherweise nicht bekannt waren, ist, dass eine zunehmende Anzahl von C++-Programmierern sich in der ohne jeden Schick Programmierung im C-Format des Gesterns und modernes C++ stattdessen angezogen verfügen gefaltet haben.

Eine der ursprünglichen Anforderungen für C++ war Abwärtskompatibilität mit dem Programmiersprache C.Inzwischen hat C++ durch mehrere Iterationen-C mit Klassen, dann die ursprüngliche C++-Sprachenspezifikation und dann die vielen folgenden Erweiterungen entwickelt.Deswegen wird Erbe, C++ häufig als eine Programmiersprache.In C++ können Sie rein prozedurale Programmierung ist im C-Format, beinhaltet die unformatierte Zeiger, Arrays, auf NULL endende Zeichenfolgen, benutzerdefinierte Datenstrukturen und andere Funktionen aktivieren, die möglicherweise große Leistung, jedoch können Fehler und Komplexität auch erzeugen.Da Programmierung im C-Format aus den Fehlerquellen wie diesen voll ist, war eines der Gründungsziele für C++, Programme typsicher und einfacher machen zu schreiben, erweitert und wartet.Früh umfasste C++ Programmierung Paradigmen wie objektorientierte Programmierung.Im Verlauf der Jahre sind Funktionen zur Sprache, zusammen mit hoch-getesteten Standardbibliotheken von Datenstrukturen und Algorithmen hinzugefügt.Diese Hinzufügungen, die das moderne C++-Format ermöglicht haben.

Modernes C++ hebt hervorgehoben:

  • Stapelbasierter Bereichs statt des Heaps oder des statischen globalen Gültigkeitsbereich.

  • Automatischer Typrückschluss statt expliziter Typnamen.

  • Intelligente Zeiger anstelle der unformatierten Zeiger.

  • std::string und std::wstring-Typen (finden Sie <string>), statt unformatierter char[] Arrays.

  • Container Standardvorlagenbibliothek (STL) wie vector, list und map anstelle der unformatierten Arrays oder der benutzerdefinierten Container.Siehe <vector>, <list> und <map>.

  • STL-Algorithmen anstelle der manuell codierten.

  • Ausnahmen, melden und Fehlerzustände behandeln.

  • Sperrenfreie InterThreadkommunikation mithilfe STLs std::atomic<> (siehe <atomic>), statt anderer InterThreadkommunikationsmechanismen.

  • inline Lambda-Funktionen anstelle der kleinen Funktionen separat implementiert.

  • Bereichsbasiert, damit Schleifen robustere Schleifen schreiben, die mit Arrays, STL-Containern und Windows-Runtime-Auflistungen in der Form for (for-range-declaration:expression) arbeiten.Dies ist ein Teil der Kern-Sprachunterstützung.Weitere Informationen finden Sie unter Bereichsbasiert für Anweisung (C++).

Die Programmiersprache C++ selbst hat auch entwickelt.Vergleichen Sie die folgenden Codeausschnitte.Dies zeigt an, wie Dinge verwenden, um in C++ sein:

// 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;

Im Folgenden wird gezeigt, wie die gleiche Aufgabe in modernem C++ erreichen:

#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 modernem C++ müssen Sie neues/Löschen oder explizite Ausnahmebehandlung nicht verwenden, da Sie intelligenten Zeiger stattdessen verwenden können.Wenn Sie die auto-Typableitung und Lambda-Funktion verwenden, können Sie Code schneller schreiben, verdichten und leichter verstehen.Die for_each ist der klarer, einfacher zu verwenden, und weniger anfällig für unbeabsichtigte Fehler als eine for-Schleife.Sie können vorformulierten Satz zusammen mit minimalen Codezeilen verwenden, um die Anwendung zu schreiben.Außerdem können Sie diesen Code und ArbeitsspeicherSAFE ausnahmesich ausführen und haben keine Zuordnung/Freigabe oder Fehlercodes, zu verarbeiten.

Modernes C++ enthält zwei Arten Polymorphie: Kompilierzeit, durch Vorlagen und Laufzeit, durch Vererbung und Virtualisierung.Sie können die zwei Arten der Polymorphie zum großen Auswirkungen kombinieren.Die STL-Vorlage shared_ptr verwendet interne virtuelle Methoden, um seine anscheinend mühelose Typlöschung zu erreichen.Wenn Sie nicht überbeanspruchen Virtualisierung für Polymorphie, wenn eine Vorlage die bessere Wahl ist.Vorlagen können sehr groß sein.

Wenn Sie von C++ aus einer anderen Sprache stammen, insbesondere von einer verwalteten Sprache, in der die meisten Typen Verweistypen sind und nur sehr wenige Werttypen sind, wissen Sie, dass C++-Klassen Werttypen standardmäßig sind.Aber Sie können sie als Verweistypen angeben, um Unterstützung Verhalten zu aktivieren, das objektorientierte Programmierung unterstützt.Eine hilfreiche Sicht: Werttypen sind mehr über Arbeitsspeicher und Layoutsteuerelement, Verweistypen sind mehr über die Basisklassen und virtuelle Funktionen, um der Polymorphie zu unterstützen.Standardmäßig sind Werttypen copyable-sie, die jeweils einen Kopierkonstruktor und ein Kopierzuweisungsoperator haben.Wenn Sie einen Verweistyp angeben, die Klasse Nicht-copyableDISABLE die Kopierkonstruktor- und Kopierzuweisung ausführen Operator- und einen virtuellen Destruktor verwenden, der die Polymorphie unterstützt.Werttypen können auch über den Inhalt, die, wenn sie kopiert werden, Ihnen zwei unabhängige Werte zuweisen, die Sie getrennt ändern können.Referenztypen sind jedoch über, Identität-was Art von Objekt es sein- und aus diesem Grund wird manchmal als polymorphe Typen.

C++ kommt eine Renaissance, da Leistungsfähigkeit König erneut ist.Sprachen wie Java und C# sind gut, wenn Programmiererproduktivität wichtig ist, aber sie zeigen ihren Einschränkungen an, wenn Leistungsfähigkeit und die Leistung entscheidend sind.Für Effizienz und hohe Leistungsfähigkeit besonders auf Geräten, die Hardware eingeschränkt ist, schlägt nichts modernes C++.

Nicht nur ist die Sprache, die Entwicklungstools sind, auch Modern.Visual Studio macht alle Teile des Entwicklungszyklus robust und effizient.Es schließt Tools der Anwendungslebenszyklus-Verwaltung (ALM), IDE-Erweiterungen wie IntelliSense, Tool-benutzerfreundliche Mechanismen wie XAML und das Erstellen, Debuggen und viele weitere Tools ein.

Die Artikel in diesem Teil der Dokumentation setzen Richtlinien auf hoher Ebene und bewährte Methoden für die wichtigsten Funktionen und Techniken für das Schreiben von modernen C++-Programmen fest.

Siehe auch

Referenz

Lambda-Ausdrücke in C++

Weitere Ressourcen

C++-Sprachreferenz

C++-Standardbibliothek-Referenz