Références const et situations appropriées
Passer efficacement et en toute sécurité de grands objets avec des références const
Références const et situations appropriées est une leçon C++ Academy gratuite sur CoddyKit. Ceci est la leçon 3 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.
Ce que promet une référence constante
Une const T& signifie : « Je ne modifierai pas ce que je référence. » Le compilateur l’impose.
void print(const std::string& s) {
// s.clear(); // ERROR: s is const
std::cout << s;
}Pourquoi ne pas simplement passer par valeur ?
Copier de gros objets est coûteux. Une référence constante est pratiquement gratuite (il s’agit simplement d’un pointer en interne) et n’autorise jamais la fonction à modifier les données de l’appelant.
Liaison avec n’importe quelle valeur
Une référence constante peut être liée à des lvalues, des rvalues et des temporaires, ce qui en fait le type de paramètre le plus permissif pour un accès en lecture seule.
void f(const std::string& s);
std::string a = "hi";
f(a); // lvalue
f("hello"); // temporary string
f(std::move(a)); // rvalueProlongation de la durée de vie
Lier un temporaire à une référence constante prolonge la durée de vie du temporaire jusqu’à celle de la référence. C’est utile pour la construction en ligne.
const std::string& greeting = "Hello, " + name;
// the concatenated string lives as long as `greeting`Quand NOT utiliser une référence const
Pour les types trivialement copiables (int, double, pointer), passez par valeur. La référence ajoute une indirection sans rien apporter en échange.
Référence const dans une boucle for fondée sur une plage
La boucle canonique en lecture seule. Elle évite à la fois les copies et les modifications accidentelles.
for (const auto& x : container) {
process(x);
}Retour d’une référence constante
Renvoyez une référence constante lorsque le résultat est un objet existant que l’appelant ne doit pas modifier, par exemple un membre ou une valeur mise en cache.
class Person {
std::string name_;
public:
const std::string& name() const { return name_; }
};Correction vis-à-vis de const
Marquez comme const chaque paramètre et chaque fonction membre qui ne modifie pas l’état. Le compilateur détectera les écritures accidentelles, constituant ainsi un puissant filet de sécurité.
Fonctions membres constantes
Une fonction membre marquée const après la liste des paramètres ne peut pas modifier l’objet. Elle est appelée sur des instances constantes.
class Counter {
int n_ = 0;
public:
int value() const { return n_; } // pure reader
void increment() { n_++; }
};Piège : const_cast supprime const
Vous pouvez supprimer const avec const_cast, mais le faire sur un objet initialement constant entraîne un comportement indéfini. Utilisez cette technique uniquement pour interagir avec d’anciennes interfaces de programmation non constantes.
mutable pour l’état interne
Le mot-clé mutable permet à une fonction membre constante de modifier certains membres, ce qui est utile pour la mise en cache ou les mutex.
class Cache {
mutable std::mutex mtx_;
mutable std::optional<int> cached_;
public:
int value() const {
std::lock_guard<std::mutex> lk(mtx_);
// ...
}
};Vérification rapide
Pourquoi est-il généralement préférable d’écrire const std::string& plutôt que std::string pour un paramètre ?
Récapitulatif
Utilisez const T& pour les paramètres en lecture seule, les valeurs de retour des accesseurs et les boucles fondées sur une plage. Pour les types non triviaux, cette solution est plus rapide que le passage par valeur et plus sûre que les références non constantes.
Apprends C++ avec un tuteur IA — gratuit
Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.
- Cours
- 51
- Leçons
- 203
Questions Fréquemment Posées
La leçon « Références const et situations appropriées » est-elle gratuite ?
Oui — le texte complet de « Références const et situations appropriées » 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 « Références const et situations appropriées » ?
Passer efficacement et en toute sécurité de grands objets avec des références const 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 3 sur 4.
Combien de temps prend la leçon « Références const et situations appropriées » ?
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