Partager via


Retours de fonction de type référence

Les fonctions peuvent être déclarées pour retourner un type référence. Il existe deux raisons d'effectuer une déclaration :

  • Les informations retournées sont un objet suffisamment grand pour que retourner une référence soit plus efficace que retourner une copie.

  • Le type de la fonction doit être une l-value.

Tout comme il peut être plus efficace de passer de grands objets vers les fonctions par référence, il peut également être plus efficace de retourner de grands objets depuis les fonctions par référence. Le protocole de retour par référence élimine le besoin de copier l'objet dans un emplacement temporaire avant de le retourner.

Les types de retour par référence peuvent également être utiles lorsque la fonction doit prendre une l-value. La plupart des opérateurs surchargés appartiennent à cette catégorie, notamment l'opérateur d'assignation. Les opérateurs surchargés sont décrits dans Opérateurs surchargés.

Exemple

Prenons l'exemple de Point :

// refType_function_returns.cpp
// compile with: /EHsc

#include <iostream>
using namespace std;

class Point
{
public:
// Define "accessor" functions as
//  reference types.
unsigned& x();
unsigned& y();
private:
unsigned obj_x;
unsigned obj_y;
};

unsigned& Point :: x()
{
return obj_x;
}
unsigned& Point :: y()
{
return obj_y;
}

int main()
{
Point ThePoint;
// Use x() and y() as l-values.
ThePoint.x() = 7;
ThePoint.y() = 9;

// Use x() and y() as r-values.
cout << "x = " << ThePoint.x() << "\n"
<< "y = " << ThePoint.y() << "\n";
}

Sortie

x = 7
y = 9

Notez que les fonctions x et y sont déclarées comme retournant des types référence. Ces fonctions peuvent être utilisées des deux côtés d'une instruction d'assignation.

Les déclarations des types référence doivent contenir des initialiseurs sauf dans les cas suivants :

  • Déclaration extern explicite

  • Déclaration d'une classe membre

  • Déclaration sans classe

  • Déclaration d'un argument d'une fonction ou du type de retour pour une fonction

Voir aussi

Référence

Références (C++)