14 juin 2026
Éditeurs :
Ce document est vivant et en amélioration continue.
S’il s’agissait d’un projet open‑source (code), il aurait été la version 0.8.
La copie, l’utilisation, la modification et la création d’œuvres dérivées à partir de ce projet sont autorisées sous une licence de type MIT.
Contribuer à ce projet requiert l’acceptation d’une licence de contributeur. Voir le fichier LICENSE joint pour plus de détails.
Nous mettons ce projet à disposition des « utilisateurs amicaux » afin qu’ils l’utilisent, le copient, le modifient et en dérivent, dans l’espoir d’obtenir des retours constructifs.
Les commentaires et suggestions d’améliorations sont les bienvenus.
Nous prévoyons de modifier et d’étendre ce document à mesure que notre compréhension s’améliore ainsi que le langage et l’ensemble des bibliothèques disponibles.
Lors de vos commentaires, veuillez vous référer à l’introduction qui expose nos objectifs et notre approche générale.
La liste des contributeurs se trouve ici
Problèmes :
Vous pouvez lire une explication de la portée et de la structure de ce Guide ou simplement y plonger immédiatement :
Sections d’appui :
Vous pouvez consulter des règles pour des caractéristiques spécifiques du langage :
affectation : types réguliers – préférer l’initialisation – copie – déplacement – autres opérations – défaut
class :
données –
invariant –
membres –
aides –
types concrets –
constructeurs, =, et destructeurs –
hiérarchie –
opérateurs
concept :
règles –
dans la programmation générique –
arguments de modèle –
sémantique
constructeur :
invariant –
établir l’invariant –
throw –
défaut –
non nécessaire –
explicit –
délégation –
virtual
classe dérivée class :
quand l’utiliser –
comme interface –
destructeurs –
copie –
accesseurs et mutateurs –
héritage multiple –
surcharge –
slicing –
dynamic_cast
destructeur : et constructeurs – quand nécessaire ? – ne doit pas échouer
exception :
erreurs –
throw –
pour les erreurs uniquement –
noexcept –
minimiser try –
et si aucune exception ?
for :
range‑for et for –
for et while –
initialisation du for –
corps vide –
variable de boucle –
type de variable de boucle ???
fonction : nommage – opération unique – pas d’exception – arguments – passage d’arguments – valeurs de retour multiples – pointeurs – lambdas
inline :
fonctions petites –
dans les en‑têtes
initialisation :
toujours –
préférer {} –
lambdas –
initialiseurs de membres par défaut –
membres de classe –
fonctions usine
expression lambda : quand l’utiliser
opérateur : conventionnel – éviter les opérateurs de conversion – et lambdas
public, private et protected :
cacher l’information –
cohérence –
protected
static_assert :
vérification à la compilation –
et concepts
struct :
pour organiser des données –
utiliser si aucun invariant –
pas de membres privés
template :
abstraction –
conteneurs –
concepts
unsigned :
et signé –
manipulation de bits
virtual :
interfaces –
pas virtual –
destructeur –
ne jamais échouer
Vous pouvez consulter les concepts de conception utilisés pour exprimer les règles :