RÉFÉRENCES

Salut ce forum apprends les bases du c++

Moderator: Rick

Post Reply
Hydraxx
Site Admin
Posts: 114
Joined: Mon Jan 12, 2026 4:04 pm
Location: France
Contact:

RÉFÉRENCES

Post by Hydraxx »

RÉFÉRENCES

À QUOI ÇA SERT ?

Une référence est un alias d’un objet existant.

Elle permet notamment :
  • de modifier un objet depuis une fonction ;
  • d’éviter une copie ;
  • d’exprimer qu’un objet doit exister.

1. RÉFÉRENCE SIMPLE

Code: Select all

int x{10};
int& ref{x};
ref est un autre nom pour x.

Code: Select all

ref = 20;
x vaut maintenant 20.


2. DIFFÉRENCE AVEC POINTEUR


Pointeur :

Code: Select all

int* ptr{&x};
Utilisation :

Code: Select all

*ptr = 20;
Référence :

Code: Select all

int& ref{x};
ref = 20;
La syntaxe est plus directe.


3. UNE RÉFÉRENCE DOIT ÊTRE INITIALISÉE


Interdit :

Code: Select all

int& ref;
Une référence normale doit désigner un objet dès sa création.


4. ELLE NE PEUT PAS ÊTRE REDIRIGÉE

Code: Select all

int a{1};
int b{2};

int& ref{a};

ref = b;
Cela ne fait pas pointer ref vers b.

Cela signifie :

Code: Select all

a = b;
a devient 2.


5. PASSAGE PAR RÉFÉRENCE

Code: Select all

void increment(int& x)
{
    ++x;
}
Appel :

Code: Select all

int value{10};
increment(value);
value devient 11.

Pourquoi ?

Le paramètre x est un alias de value.


6. PASSAGE PAR RÉFÉRENCE const

Code: Select all

void process(const LargeObject& obj)
{
}
Pourquoi ?

Sans référence :

Code: Select all

void process(LargeObject obj)
tu copies l’objet.

Avec const& :
  • pas de copie ;
  • pas de modification.

7. PETITS TYPES


Pour int :

Code: Select all

void f(int x)
est souvent meilleur que :

Code: Select all

void f(const int& x)
Pourquoi ?

Un int est petit et passe efficacement dans un registre.

La référence peut même ajouter une indirection.


8. RETOUR PAR RÉFÉRENCE

Code: Select all

int& first(std::vector<int>& v)
{
    return v[0];
}
Puis :

Code: Select all

first(v) = 100;
modifie directement v[0].


9. ERREUR TRÈS GRAVE

Code: Select all

int& bad()
{
    int x{42};
    return x;
}
x est détruit à la sortie de bad().

La référence retournée pointe vers un objet qui n’existe plus.

C’est une dangling reference.


10. RÉFÉRENCE VERS POINTEUR

Code: Select all

int* ptr{nullptr};
int*& ref{ptr};
ref est un alias du pointeur lui-même.

Une fonction peut ainsi modifier l’adresse stockée.

Code: Select all

void allocate(int*& ptr)
{
    ptr = new int{42};
}

11. RÉFÉRENCE OU POINTEUR ?


Référence :
quand l’objet doit obligatoirement exister.

Pointeur :
quand nullptr est une valeur logique possible.

Exemple :

Code: Select all

void process(const Buffer& buffer);
buffer obligatoire.

Code: Select all

void process(Buffer* buffer);
peut suggérer que nullptr est autorisé.


12. AU NIVEAU MACHINE


Une référence est une abstraction du langage.

Elle est très souvent implémentée comme une adresse transmise de façon similaire à un pointeur.

Mais le standard ne te demande pas de raisonner dessus comme un pointeur réassignable.


À RETENIR


Référence = alias.

Pointeur = variable contenant une adresse.

Ils peuvent avoir des représentations proches en machine, mais leur sémantique C++ est différente.

Return to “Bases du C++”

Who is online

Users browsing this forum: No registered users and 1 guest