Démarrer l'essai gratuit
Searching...
SoBrief
Français
EnglishEnglish
EspañolSpanish
简体中文Chinese
繁體中文Chinese (Traditional)
FrançaisFrench
DeutschGerman
日本語Japanese
PortuguêsPortuguese
ItalianoItalian
한국어Korean
РусскийRussian
NederlandsDutch
العربيةArabic
PolskiPolish
हिन्दीHindi
Tiếng ViệtVietnamese
SvenskaSwedish
ΕλληνικάGreek
TürkçeTurkish
ไทยThai
ČeštinaCzech
RomânăRomanian
MagyarHungarian
УкраїнськаUkrainian
Bahasa IndonesiaIndonesian
DanskDanish
SuomiFinnish
БългарскиBulgarian
עבריתHebrew
NorskNorwegian
HrvatskiCroatian
CatalàCatalan
SlovenčinaSlovak
LietuviųLithuanian
SlovenščinaSlovenian
СрпскиSerbian
EestiEstonian
LatviešuLatvian
فارسیPersian
മലയാളംMalayalam
தமிழ்Tamil
اردوUrdu
Le langage de programmation C++

Le langage de programmation C++

par Bjarne Stroustrup 1986 1030 pages
4.10
4 000+ évaluations
Écouter
Essayez l'accès complet pendant 3 jours
Débloquez l'écoute et bien plus !
Continuer

Points clés

1. C++ : Un langage pour des abstractions élégantes et efficaces

C++ est un langage conçu pour développer et utiliser des abstractions à la fois élégantes et performantes.

Double nature. C++ vise à combler le fossé entre l’accès bas niveau au matériel et les domaines problématiques de haut niveau. Il hérite de l’efficacité de C pour la programmation système tout en ajoutant des mécanismes d’abstraction puissants inspirés de Simula. L’objectif est d’offrir un langage à la fois performant et expressif, permettant aux programmeurs de représenter directement les concepts dans le code.

  • Accès direct au matériel
  • Mécanismes d’abstraction abordables
  • Langage à usage général
  • Orientation vers la programmation système

Zéro surcharge. Un principe fondamental de la conception de C++ est le « principe de zéro surcharge » : on ne paie pas pour ce que l’on n’utilise pas. Les fonctionnalités du langage et les abstractions fondamentales sont conçues pour être aussi efficaces que du code écrit à la main. Cela est crucial pour les applications critiques en performance et les logiciels d’infrastructure.

  • L’efficacité avant tout
  • Pas de coût implicite pour les fonctionnalités inutilisées
  • Adapté aux environnements contraints en ressources

Exprimer les idées. Le langage cherche à aider les programmeurs à exprimer clairement et directement leurs idées dans le code. Cela passe par la représentation des concepts sous forme de types, des relations sous forme de hiérarchies ou de paramétrages, et la séparation des idées indépendantes. La synthèse de différents styles de programmation est encouragée pour atteindre les meilleures solutions.

  • Exprimer les idées directement
  • Représenter les relations
  • Séparer les idées indépendantes
  • Simplicité dans les idées simples

2. Le C++ moderne (C++11) : un langage amélioré

C++ donne l’impression d’être un langage nouveau.

Évolution majeure. Le langage C++ a connu des améliorations spectaculaires au fil des années, notamment avec la norme C++11. Ces changements ont fait de C++ un outil bien plus puissant et abouti pour écrire des logiciels de qualité. Le C++ moderne permet une expression des idées plus claire, simple et directe.

  • C++11 vs C++98
  • Expressivité renforcée
  • Sécurité et performance améliorées

Fonctionnalités clés. C++11 a introduit une multitude de fonctionnalités qui ont fondamentalement changé la manière d’écrire et d’utiliser C++. On y trouve un meilleur support de la concurrence, de la gestion des ressources et de la programmation générique, ainsi que des facilités syntaxiques réduisant le code répétitif.

  • Support de la concurrence (std::thread, std::mutex)
  • Sémantique de déplacement (std::move, références rvalue)
  • Pointeurs intelligents (unique_ptr, shared_ptr)
  • Lambdas
  • auto et constexpr
  • Listes d’initialisation

Adopter les styles modernes. Il est vivement conseillé aux programmeurs d’adopter les fonctionnalités et styles du C++ moderne. S’en tenir aux styles anciens C++98 ou C entraînera un code de moindre qualité, moins maintenable et potentiellement moins performant. La norme garantit la compatibilité ascendante, mais le progrès est inévitable.

3. Les classes : fondement de l’abstraction

La caractéristique centrale du langage C++ est la classe.

Types définis par l’utilisateur. Les classes sont le mécanisme principal pour créer des types définis par l’utilisateur qui représentent directement dans le code les concepts du domaine problématique. Un ensemble bien choisi de classes rend un programme plus facile à comprendre, à raisonner et à modifier.

  • Représenter les concepts sous forme de types
  • Fondement des mécanismes d’abstraction
  • Améliorer la clarté et la maintenabilité du code

Encapsulation. Les classes permettent de distinguer l’interface publique (ce que les utilisateurs voient et utilisent) des détails d’implémentation privés (membres de données et fonctions auxiliaires). Cela garantit le masquage des données, assure une utilisation cohérente et permet de modifier l’implémentation sans impacter le code utilisateur.

  • Interface publique
  • Implémentation privée
  • Masquage des données
  • Séparation des responsabilités

Constructeurs et destructeurs. Les constructeurs définissent comment les objets sont initialisés, garantissant qu’ils sont dans un état valide dès leur création. Les destructeurs définissent les actions de nettoyage lors de la destruction d’un objet, essentielles pour libérer les ressources. Cette paire constructeur/destructeur est fondamentale pour les techniques de gestion des ressources comme RAII.

  • Initialisation garantie
  • Acquisition des ressources (constructeurs)
  • Libération des ressources (destructeurs)
  • Invariants de classe

4. Gestion des ressources : RAII et pointeurs intelligents

La combinaison constructeur/destructeur est à la base de nombreuses techniques élégantes.

Principe RAII. L’acquisition des ressources est initialisation (RAII) est une technique fondamentale en C++ où l’acquisition des ressources est liée à l’initialisation des objets (constructeurs) et la libération des ressources à leur destruction (destructeurs). Cela garantit une gestion correcte des ressources même en cas d’exceptions ou de sorties anticipées de fonctions.

  • Acquisition des ressources dans les constructeurs
  • Libération des ressources dans les destructeurs
  • Nettoyage automatique à la sortie de portée
  • Sécurité face aux exceptions

Éviter les fuites. RAII aide à prévenir les fuites de ressources (comme les fuites mémoire) et autres erreurs de gestion (suppression prématurée, double suppression). En encapsulant la propriété des ressources dans des objets, le compilateur gère automatiquement le nettoyage.

  • Élimine les new et delete « nus »
  • Prévention des fuites mémoire
  • Gestion des fichiers, verrous, threads, etc.

Pointeurs intelligents. unique_ptr et shared_ptr sont des pointeurs intelligents de la bibliothèque standard qui utilisent RAII pour gérer la mémoire allouée dynamiquement. unique_ptr offre une propriété exclusive, tandis que shared_ptr permet une propriété partagée via un comptage de références. Ils sont préférés aux pointeurs bruts pour gérer les objets sur le tas.

  • unique_ptr (propriété exclusive)
  • shared_ptr (propriété partagée)
  • Désallocation automatique de la mémoire
  • Évite les appels manuels à delete

5. Templates : permettre la programmation générique

Un template est une classe ou une fonction que l’on paramètre par un ensemble de types ou de valeurs.

Paramétrage à la compilation. Les templates permettent de définir des classes, fonctions et alias de types paramétrés par des types, valeurs ou autres templates. Cela permet d’écrire du code fonctionnant avec une variété de types sans sacrifier la performance.

  • Paramétrage par type ou valeur
  • Polymorphisme à la compilation
  • Génération de code

Programmation générique. Les templates sont la base de la programmation générique en C++, qui consiste à concevoir des algorithmes et structures de données fonctionnant avec tout type respectant certaines exigences (concepts). Cela permet d’écrire un code très réutilisable, à la fois sûr et efficace.

  • Concevoir des algorithmes généraux
  • Fonctionner avec divers types
  • Concepts (exigences sur les arguments)

Efficacité. Les templates sont un mécanisme à la compilation, ce qui signifie qu’ils n’entraînent généralement aucun surcoût à l’exécution par rapport à un code équivalent écrit à la main. Cela est rendu possible grâce à des techniques comme l’inlining et le calcul à la compilation.

  • Zéro surcoût à l’exécution
  • Permet l’inlining
  • Calcul à la compilation

6. La bibliothèque standard : votre boîte à outils essentielle

Aucun programme significatif n’est écrit uniquement dans un langage de programmation nu.

Composants essentiels. La bibliothèque standard fournit un ensemble complet de composants fondamentaux indispensables à presque tout programme C++. On y trouve des conteneurs, algorithmes, facilités d’entrée/sortie, utilitaires et support de la concurrence.

  • Conteneurs (vector, list, map, set)
  • Algorithmes (sort, find, copy, unique)
  • Flux d’E/S (cin, cout, cerr)
  • Utilitaires (pair, tuple, pointeurs intelligents, temps)
  • Support de la concurrence

Fondation. La bibliothèque standard est écrite en C++ lui-même, démontrant la puissance du langage et servant de modèle pour une bonne conception C++. Elle constitue une base commune pour d’autres bibliothèques et applications, favorisant portabilité et interopérabilité.

  • Écrite en C++
  • Modèle de bonne conception
  • Favorise la portabilité
  • Permet l’interopérabilité

Préférer le standard. Il est fortement conseillé aux programmeurs d’utiliser les composants de la bibliothèque standard autant que possible plutôt que de les réinventer. Ces composants sont bien conçus, optimisés, largement disponibles et bien connus, ce qui réduit les coûts de maintenance et améliore la qualité du code.

  • Ne pas réinventer la roue
  • Bien conçus et optimisés
  • Largement disponibles et connus

7. Concurrence : support intégré du parallélisme

La concurrence – exécuter plusieurs tâches simultanément – est largement utilisée pour améliorer le débit (en utilisant plusieurs processeurs pour un calcul unique) ou la réactivité (en permettant à une partie du programme d’avancer pendant qu’une autre attend une réponse).

Fonctionnalité moderne. C++ inclut un support robuste, portable et sûr au niveau des types pour la programmation concurrente, répondant aux besoins du matériel multi-cœurs moderne. C’est une avancée majeure introduite avec C++11.

  • Support intégré
  • Portable et sûr au niveau des types
  • Adapté aux processeurs multi-cœurs

Threads et tâches. La bibliothèque offre une gestion bas niveau des threads (std::thread) et des abstractions de plus haut niveau basées sur les tâches (std::future, std::async). Les threads partagent un espace d’adressage, ce qui nécessite une synchronisation soigneuse pour éviter les conflits de données.

  • std::thread pour les threads système
  • Espace d’adressage partagé
  • Concurrence basée sur les tâches (std::async)

Synchronisation. Des mécanismes comme les mutex (std::mutex) et variables de condition (std::condition_variable) sont fournis pour gérer l’accès aux données partagées et synchroniser les threads. Les opérations atomiques offrent une synchronisation fine sans verrou pour les types simples.

  • Mutex et verrous
  • Variables de condition
  • Opérations atomiques
  • Éviter les conflits de données

8. Maîtriser les types et les facilités de base

Chaque nom et chaque expression possède un type qui lui est associé.

Blocs fondamentaux. Comprendre les types intégrés de C++ (int, double, char, bool), comment déclarer des variables, les règles de portée, ainsi que les instructions de contrôle de base (if, switch, for, while) est essentiel. Ces éléments, hérités et améliorés de C, forment la base de tous les programmes C++.

  • Types intégrés
  • Déclarations et portée
  • Instructions de contrôle
  • Expressions et opérateurs

Sécurité des types. C++ est un langage à typage statique, ce qui signifie que les types sont vérifiés à la compilation. Cela aide à détecter les erreurs tôt. Des fonctionnalités comme auto pour la déduction de type et constexpr pour les constantes à la compilation renforcent la sécurité des types et l’expressivité.

  • Vérification statique des types
  • Détection précoce des erreurs
  • auto pour la déduction de type
  • constexpr pour les constantes à la compilation

Pointeurs et références. C++ fournit des pointeurs et références pour accéder indirectement à la mémoire. Bien que puissants, ils nécessitent une gestion attentive, surtout en ce qui concerne la propriété des ressources. Les pointeurs intelligents sont préférés aux pointeurs bruts pour gérer la mémoire dynamique.

  • Pointeurs et références
  • Accès indirect à la mémoire
  • Pointeurs intelligents pour la propriété

9. Combiner les styles de programmation pour des solutions efficaces

La meilleure solution (la plus maintenable, lisible, compacte, rapide, etc.) à la plupart des problèmes complexes tend à combiner plusieurs styles.

Synthèse, pas exclusivité. C++ est conçu pour supporter plusieurs styles de programmation : procédural, abstraction de données, orienté objet et générique. Les fonctionnalités du langage permettent d’utiliser ces styles en combinaison, et les solutions les plus efficaces mêlent souvent plusieurs paradigmes.

  • Programmation procédurale
  • Abstraction de données
  • Programmation orientée objet
  • Programmation générique

Éviter le dogmatisme. Se focaliser exclusivement sur un seul style ou considérer C++ comme un langage « hybride » limite la puissance de sa synthèse. Le langage offre des outils qui peuvent être utilisés élégamment en combinaison pour soutenir une grande variété de techniques.

  • Le langage supporte les combinaisons
  • Éviter la pensée mono-paradigme

Conception pratique. Programmer efficacement en C++ consiste à choisir les bons outils (fonctionnalités du langage, composants de la bibliothèque standard) parmi ceux disponibles et à les combiner judicieusement selon le problème à résoudre. Cela demande de comprendre les forces et faiblesses des approches et leur interaction.

  • Choisir les bons outils
  • Combiner les fonctionnalités efficacement
  • Se concentrer sur la conception et les techniques

10. Gestion des erreurs : exceptions et garanties

La notion d’exception permet de transmettre une information du point où une erreur est détectée vers un point où elle peut être traitée.

Séparation des préoccupations. Les exceptions (throw, catch) offrent un mécanisme pour séparer le code qui détecte une erreur de celui qui la gère. Cela est particulièrement utile dans les grands programmes et bibliothèques où le détecteur ne sait pas comment récupérer, et le gestionnaire ne peut pas facilement détecter l’erreur.

  • throw pour signaler les erreurs
  • catch pour les gérer
  • Découplage détection/gestion

Sécurité des exceptions. La bibliothèque standard garantit l’état des objets lors du lancement d’exceptions. La garantie de base assure que les invariants sont maintenus et qu’aucune ressource n’est perdue. La garantie forte assure que les opérations réussissent entièrement ou n’ont aucun effet.

  • Garantie de base (pas de fuite, état valide)
  • Garantie forte (tout ou rien)
  • Spécificateur noexcept

Intégration avec RAII. La gestion des exceptions est étroitement liée à RAII (acquisition des ressources est initialisation). Cela garantit que les ressources acquises par les objets sont correctement libérées lors du déroulement de la pile quand une exception se propage, évitant les fuites et simplifiant le code de nettoyage.

  • RAII pour le nettoyage
  • Destructeurs appelés lors du déroulement de la pile

Dernière mise à jour:

Report Issue

Résumé des avis

4.10 sur 5
Moyenne de 4 000+ évaluations de Goodreads et Amazon.

Le Langage de Programmation C++ est largement reconnu comme la référence incontournable du C++, rédigée par le créateur même du langage. Salué pour son exhaustivité et ses analyses précieuses, cet ouvrage n’en demeure pas moins inadapté aux débutants. On le décrit comme dense, parfois verbeux, et davantage utile en tant qu’outil de consultation qu’en tant que manuel d’apprentissage. Les programmeurs expérimentés apprécient sa profondeur et la richesse de ses détails techniques. Si certains reprochent son style d’écriture et son organisation, d’autres le considèrent comme indispensable pour maîtriser pleinement le C++. En somme, ce livre constitue une ressource essentielle pour les professionnels, mais représente un défi pour les novices.

Your rating:
4.49
122 évaluations
Want to read the full book?

À propos de l'auteur

Bjarne Stroustrup est un informaticien danois surtout reconnu comme le créateur du langage de programmation C++. Il a développé le C++ en 1979 alors qu’il travaillait chez Bell Labs, avec pour objectif d’enrichir le langage C de fonctionnalités adaptées à la programmation à grande échelle. Stroustrup a joué un rôle déterminant dans l’évolution de ce langage, en publiant plusieurs éditions de The C++ Programming Language et en contribuant à la normalisation ISO du C++. Il a reçu de nombreuses distinctions pour son travail, notamment le Computer Entrepreneur Award de l’IEEE Computer Society. Stroustrup a également occupé des postes à l’université Texas A&M et à l’université Columbia, continuant ainsi d’influencer le domaine de l’informatique et la conception des langages de programmation.

Follow
Écouter
Now playing
Le langage de programmation C++
0:00
-0:00
Now playing
Le langage de programmation C++
0:00
-0:00
1x
Queue
Home
Swipe
Library
Get App
Try Full Access for 3 Days
Listen, bookmark, and more
Compare Features Free Pro
📖 Read Summaries
Read unlimited summaries. Free users get 3 per month
🎧 Listen to Summaries
Listen to unlimited summaries in 40 languages
❤️ Unlimited Bookmarks
Free users are limited to 4
📜 Unlimited History
Free users are limited to 4
📥 Unlimited Downloads
Free users are limited to 1
Risk-Free Timeline
Aujourd'hui : Accès immédiat
Écoutez les résumés complets de plus de 26 000 livres. Soit plus de 12 000 heures d'audio !
Jour 2 : Rappel d'essai
Nous vous enverrons une notification pour vous informer que votre essai se termine bientôt.
Jour 3 : Votre abonnement commence
Vous serez débité le Jun 11,
annulez à tout moment avant.
Consume 2.8× More Books
2.8× more books Listening Reading
Our users love us
600,000+ readers
Trustpilot Rating
TrustPilot
4.6 Excellent
This site is a total game-changer. I've been flying through book summaries like never before. Highly, highly recommend.
— Dave G
Worth my money and time, and really well made. I've never seen this quality of summaries on other websites. Very helpful!
— Em
Highly recommended!! Fantastic service. Perfect for those that want a little more than a teaser but not all the intricate details of a full audio book.
— Greg M
Save 62%
Yearly
$119.88 $44.99/year/yr
$3.75/mo
Monthly
$9.99/mo
Start a 3-Day Free Trial
3 days free, then $44.99/year. Cancel anytime.
Unlock a world of fiction & nonfiction books
26,000+ books for the price of 2 books
Read any book in 10 minutes
Discover new books like Tinder
Request any book if it's not summarized
Read more books than anyone you know
#1 app for book lovers
Lifelike & immersive summaries
30-day money-back guarantee
Download summaries in EPUBs or PDFs
Cancel anytime in a few clicks
Scanner
Find a barcode to scan

We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel
Settings
General
Widget
Loading...
We have a special gift for you
Open
38% OFF
DISCOUNT FOR YOU
$79.99
$49.99/year
only $4.16 per month
Continue
2 taps to start, super easy to cancel