Retornos de función de tipo de referencia
las funciones se pueden declarar para devolver un tipo de referencia.Hay dos motivos para realizar este tipo de declaración:
La información que se devuelva es suficiente para un objeto que devuelva una referencia es más eficaz que devuelve una copia.
El tipo de la función debe ser un valor l.
Igual que puede ser más eficaz transferir objetos grandes a funciones por referencia, también puede ser más eficaz devolver objetos grandes de funciones por referencia.el protocolo de Referencia-retorno elimina la necesidad de copiar el objeto en una ubicación temporal antes de volver.
los tipos de Referencia-retorno también pueden ser útiles cuando la función se debe evaluar como un valor l.La mayoría de los operadores sobrecargados pertenecen a esta categoría, especialmente el operador de asignación.Cubren los operadores sobrecargados de operadores sobrecargados.
Ejemplo
considere el ejemplo 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";
}
Output
x = 7
y = 9
Observe que las funciones x y y se declaradas como devolver tipos de referencia.estas funciones se pueden utilizar a cada lado de una instrucción de asignación.
las declaraciones de tipos de referencia deben contener inicializadores excepto en los casos siguientes:
declaración explícita de extern
Declaración de miembro de clase
declaración dentro de una clase
Declaración de un argumento de una función o tipo de valor devuelto para una función