Vrácení funkce typu odkazu
Funkce mohou být deklarovány, aby vracely odkaz.Existují dva důvody pro tuto deklaraci:
Vrácené informace jsou dostatečně velký objekt, takže vrácení odkazu je efektivnější než vrácení kopie.
Typ funkce musí být l-hodnota.
Stejně jako může být efektivnější předat velké objekty do funkce odkazem, také může být efektivnější velké objekty z funkce vrátit odkazem.Protokol vrácení odkazu eliminuje nutnost kopírování objektu do dočasného umístění před vrácením.
Typy vracející odkaz mohou být také užitečné, když se funkce musí vyhodnotit na l-hodnotu.Nejvíce přetížených operátorů patří do této kategorie, zejména operátor přiřazení.Přetížené operátory jsou uvedeny v tématu Přetížené operátory.
Příklad
Zvažte příklad typu 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";
}
Výsledek
x = 7
y = 9
Všimněte si, že funkce x a y jsou deklarovány, aby vracely odkazy.Tyto funkce lze použít na obou stranách příkazu přiřazení.
Deklarace odkazů musí obsahovat inicializátory s výjimkou těchto případů:
Explicitní deklarace pomocí klíčového slova extern
Deklarace člena třídy
Deklarace v rámci třídy
Deklarace argumentu funkce nebo návratového typu funkce