Sdílet prostřednictvím


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

Viz také

Referenční dokumentace

Odkazy (C++)