Passage par valeur ou par référence
Comparer les différences sémantiques et de performances entre le passage par valeur et le passage par référence
Passage par valeur ou par référence est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C++ Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C++ Academy comprend 4 leçons au total.
Récapitulatif du passage par valeur
Lorsque vous transmettez un argument par valeur, la fonction reçoit une copie. Les modifications effectuées dans la fonction n’ont aucun effet sur l’appelant.
void increment(int x) {
x++; // modifies the copy
}
int n = 5;
increment(n);
std::cout << n; // still 5Passage par référence
Effectuez un passage par référence en utilisant & dans la liste des paramètres. La fonction travaille directement sur la variable de l’appelant.
void increment(int& x) {
x++;
}
int n = 5;
increment(n);
std::cout << n; // now 6Pourquoi utiliser le passage par référence ?
Deux raisons :
- Éviter de copier de gros objets (performances)
- Modifier la variable de l’appelant (sémantique)
Référence constante : le meilleur des deux mondes
Une référence const évite la copie sans donner à la fonction la permission de modifier l’objet. Utilisez-la pour les paramètres d’entrée non triviaux.
void printName(const std::string& name) {
std::cout << name;
}Règles générales
Pour les paramètres de fonction :
- Facile à copier (int, double, pointer) → passage par valeur
- Difficile à copier et en lecture seule →
const T& - La fonction modifie les données de l’appelant →
T&
Passage par pointer
Les pointeurs permettent également de modifier la variable de l’appelant, mais celui-ci doit prendre explicitement son adresse avec &, ce qui rend l’intention visible.
void increment(int* x) {
(*x)++;
}
int n = 5;
increment(&n);Paramètre par référence ou par pointeur
Les références sont préférables lorsque la valeur est toujours requise. Les pointeurs conviennent lorsque l’argument est facultatif : transmettez nullptr pour l’omettre.
Retour par valeur
Le retour par valeur est le comportement par défaut. Grâce à RVO (optimisation du retour de valeur) et à la sémantique de déplacement, il est généralement aussi rapide qu’un retour par référence, tout en étant plus sûr.
Retour par référence
Renvoyez une référence lorsque la fonction renvoie un objet existant dont la durée de vie dépasse celle de l’appel, par exemple un membre d’un conteneur. Ne renvoyez jamais une référence vers une variable locale.
Mélange des styles de passage dans les modèles
Les modèles utilisent souvent des références universelles (T&&) et std::forward pour préserver les catégories de valeurs. Nous aborderons ce sujet dans le cours sur la sémantique de déplacement.
Erreur courante : découpage
Transmettez les classes dérivées par référence (ou par pointeur) à un paramètre de base. Le passage par valeur tronque la partie dérivée de l’objet.
class Base { /* virtual */ };
class Derived : public Base { /* members */ };
void takeByValue(Base b); // SLICES Derived!
void takeByRef(Base& b); // OKVérification rapide
Comment devez-vous transmettre un grand std::string que la fonction fait uniquement lire ?
Récapitulatif
Le passage par valeur effectue une copie ; le passage par référence partage l’objet. Utilisez const T& pour les gros objets en lecture seule, T& lorsque vous modifiez les données de l’appelant, et le passage par valeur pour les petits types intégrés.
Questions Fréquemment Posées
La leçon « Passage par valeur ou par référence » est-elle gratuite ?
Oui — le texte complet de « Passage par valeur ou par référence » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C++ Academy, passe à CoddyKit PRO. Le cours C++ Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Passage par valeur ou par référence » ?
Comparer les différences sémantiques et de performances entre le passage par valeur et le passage par référence Tu pratiques C++ Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer C++ Academy ?
Aucune expérience préalable n'est requise. C++ Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Passage par valeur ou par référence » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon C++ Academy ?
Oui. Chaque leçon C++ Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Pourquoi les références sont des alias de variables
- Passage par valeur ou par référence
- Références const et situations appropriées
- Durée de vie des références et références pendantes