> For the complete documentation index, see [llms.txt](https://cours-cpp.gitbook.io/resources/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://cours-cpp.gitbook.io/resources/introduction-pourquoi-le-c++.md).

# Introduction - Pourquoi le C++

### Avantages

* Performances : On est très proche de la machine. L'introduction concernant les performances évoque les raisons pour lesquelles on souhaiterait de meilleures performances.
* Temps réel (pas synonyme de performances) : Le C++ permet d'assurer de façon déterministe le temps d'exécution d'une fonction ou d'un programme (alors qu'un garbage collector pourrait ralentir le programme au mauvais moment par exemple).
* En grande partie compatible avec le C (norme 1999), ce qui permet d'utiliser des librairies en C ou d'exporter facilement du code utilisable en C.
* Pas de runtime : Le programme ne dépend pas d'un environnement dédié comme la JVM (pour Java). Il peut donc s'exporter dans ces autres langages alors que l'inverse n'est pas possible.
* Destructeurs et moves : Ils permettent ensemble d'avoir une gestion automatique et déterministe des ressources (mémoire, fichiers, connexions, ...), sans surcoût pour la majorité des cas.
* Value semantics : Stocker et passer des objets par valeur permet de voir qui possède quoi, d'éviter les références nulles, de copier des objets de façon triviale, et de propager l'immutabilité (via const).
* Templates : Permet d'exécuter du code à la compilation, et de détecter des d'erreurs à la compilation (meilleures abstractions, plus de sécurité et de performances).
* Contenu : De nombreuses librairies en C++ sont disponibles, et de haute qualité. Le C++ est très rétro-compatible, donc du vieux code peut toujours fonctionner.
* Communauté : Les gens sont gentils et costauds, venez faire un tour sur [Reddit](https://reddit.com/r/cpp) ou [Slack](https://cpplang.slack.com) ! Que ce soit par curiosité, pour se faire aider, pour avoir des code review ou juste parler :)

###

### Désavantages

* Unsafe : Le langage vous permet de faire n'importe quoi ... Comme des fuites ou corruptions de mémoire.
* Compliqué : Il existe plusieurs façons de faire (à peu près) les mêmes choses, et le langage est immense.
* Dur à parser : Les outils manipulant le C++ (comme les IDE) seront plus lents et moins précis que ceux d'autres langages. Les erreurs de compilation peuvent être compliquées à comprendre.
* Package managers : Les solutions émergent (Conan, Vcpkg) mais ne sont pas aussi complètes et/ou simples d'utilisations que les package managers d'autres langages (npm, pip, ....)
* Systèmes de build : La gestion des dépendences et obtenir du cross-platform ou cross-compiler peut devenir très compliqué. L'outil le plus utilisé actuellement est CMake.

### Solutions

* Passer du temps pour apprendre le langage.
* Pratiquer pour être à l'aise, productif et éviter les erreurs courantes.
* Passer du temps pour développer une bonne toolchain (IDE, intégration continue, imports et exports de librairies, vérification de code, ...).
