Accueil vers C++ (C++ moderne)

C++ est l'un des langages de programmation les plus largement utilisés dans le monde.Les programmes bien rédigés C++ sont rapides et efficaces.Le langage est plus flexible que d'autres langages car vous pouvez l'utiliser pour créer une large gamme d'application de fun et jeux passionnants, au logiciel scientifique hautes performances, aux pilotes de périphérique, aux programmes incorporé, et aux applications clientes Windows.Pendant plus de 20 ans, C++ a été utilisé pour résoudre les problèmes comme celles-ci et autres.Ce que vous ne pouvez pas connaître est qu'un nombre augmentant programmeurs C++ se sont pliés en haut de la programmation de style C sans élégance d'hier et avoir mis C++ moderne à la place.

L'une des spécifications d'origine pour C++ a été compatibilité descendante avec le langage C.Depuis, C++ a évolué via plusieurs itérations (C avec des classes, la spécification du langage de l'original C++, puis les nombreuses améliorations suivantes.Grâce à cet héritage, C++ est souvent appelé d'un langage de programmation multiparadigme.En C++, vous pouvez faire de style C purement procédural programmation qui implique les pointeurs bruts, les tableaux, les chaînes se terminant par null, les structures de données personnalisées, et d'autres fonctionnalités qui peuvent permettre de grandes performances mais peut également engendrer des bogues et la complexité.Étant donné que la programmation de style C est chargée de périls comme celles-ci, l'un des objectifs de fondation pour C++ est de rendre des programmes de type sécurisé et plus faciles à écrire, étend, et met à jour.Dès l'abord, C++ a embrassé des paradigmes de programmation tels que la programmation orientée objet.Pendant les années, les fonctionnalités ont été ajoutées au langage, ainsi que les bibliothèques standard supérieure testées des structures de données et des algorithmes.Il s'agit de ces ajouts qui ont rendu le style moderne C++ possible.

C++ moderne souligne :

  • Portée Pile- basée au lieu de tas ou de portée globale de statique.

  • Inférence de type automatique au lieu de type explicite noms.

  • Pointeurs intelligents plutôt que des pointeurs bruts.

  • std::string et types d' std::wstring (consultez <string>) au lieu des tableaux brutes d' char[] .

  • les conteneurs d'Modèles Standard (STL) comme vector, list, et map au lieu des tableaux brutes ou des conteneurs personnalisés.Consultez <vector>, <list> et <map>.

  • Conteneurs STL au lieu de manuellement le codé.

  • Exceptions, pour stocker et gérer des conditions d'erreur.

  • Communication sans verrou d'entre les threads à l'aide de STL std::atomic<> (consultez <atomic>) au lieu d'autres mécanismes de communication d'entre les threads.

  • fonctions lambda intégré au lieu de petites fonctions implémentées séparément.

  • Basé sur une plage pour que les boucles écrivent des boucles plus fiables qui s'exécutent avec les tableaux, les conteneurs STL, et des collections d' Windows Runtime dans le formulaire for (for-range-declaration :expression ).Ce fait partie de la principale prise en charge.Pour plus d'informations, consultez Basé sur une plage, instruction (C++).

Le langage C++ lui-même a évolué également.Comparez les extraits de code suivants.Celui-ci indique comment les opérations étaient en 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;

Voici comment la même opération est accomplie en C++ moderne :

#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";
} );

En C++ récent, vous ne devez pas utiliser nouveau/suppression ou gestion des exceptions explicite car vous pouvez utiliser les pointeurs intelligents à la place.Lorsque vous utilisez le type déduction et fonction lambdad' auto, vous pouvez écrire du code plus rapide, le serrez, et le mieux comprendre.Et for_each est décapant, plus facile à utiliser, et involontaires entraîner des erreurs moins qu'une boucle d' for .Vous pouvez utiliser des zones fixes avec les lignes de code minimale pour écrire votre application.Et vous pouvez procéder comme sécurisée du point de code et stockage sécurisé, et n'avez aucune allocation/libération ou code d'erreur à traiter.

C++ moderne incorpore deux genres de polymorphisme : compile, via des modèles, et le moment de l'exécution, l'héritage et la virtualisation.Vous pouvez combiner ces deux genres de polymorphisme au grand effet.Le modèle shared_ptr STL utilise les méthodes virtuelles internes pour accomplir son type apparent sans effort effacement.Mais n'abusez pas la virtualisation pour le polymorphisme lorsqu'un modèle est le meilleur choix.Les modèles peuvent être très puissants.

Si vous accédez à C++ à partir d'un autre langage, en particulier d'un langage managé dans lequel la plupart des types sont des types référence et très peu sont des types valeur, sachez que les classes C++ sont des types valeur par défaut.Mais vous pouvez les indiquer comme types référence pour activer le comportement polymorphe qui prend en charge la programmation orientée objet.Un point de vue pratique : les types valeur sont plus sur la mémoire et le contrôle de disposition, types référence sont plus sur les classes de base et les fonctions virtuelles pour prendre en charge le polymorphisme.Par défaut, les types valeur sont copyable- eux que chaque a un constructeur de copie ou un opérateur d'assignation de copie.Lorsque vous spécifiez un type référence, faites du non-copyable- de classe désactiver l'assignation de constructeur de copie et de copie opérateur- et utilisez un destructeur virtuel, qui prend en charge le polymorphisme.Les types valeur sont également sur le contenu, qui, lorsqu'ils sont copiés, vous offre deux valeurs individuelles que vous pouvez modifier séparément.Mais les types référence sont relatives à identité- ce qui le type de l'objet il être- et c'est pourquoi est parfois appelé des types polymorphes.

C++ rencontre une Renaissance car la puissance roi est de nouveau.Les langages comme Java et le c sont de bons lorsque la productivité du programmeur est important, mais ils affichent leurs limites lorsque la puissance et les performances sont primordiales.Pour la haute performance et la puissance, notamment sur les appareils qui ont le matériel informatique limite, rien ne bat C++ récent.

Non seulement le langage est récent, les outils de développement sont, et.Visual Studio rend toutes les parties du cycle de développement fiables et efficaces.Il inclut les outils de (ALM) de gestion du cycle de vie des applications, des améliorations de l'IDE comme Intellisense, les mécanismes outils conviviaux comme XAML, et générer, déboguer, et beaucoup d'autres outils.

Les éléments dans cette partie de la documentation prévoit des indications de niveau supérieur et les meilleures pratiques pour les fonctionnalités et les techniques les plus importantes pour écrire C++ moderne programme.

Voir aussi

Référence

Expressions lambda en C++

Autres ressources

Guide de référence du langage C++

Référence de la bibliothèque C++ standard