Поделиться через


Возврат функций ссылочных типов

Функции можно объявить, чтобы они возвращали ссылочный тип. Существует две причины создания такого объявления.

  • Возвращаемая информация представляет собой настолько крупный объект, что возврат ссылки кажется более эффективным, чем возврат копии.

  • Тип функции должен представлять собой l-значение.

Точно так же как передавать крупные объекты функциям эффективнее посредством ссылки, возможно, возвращать крупные объекты из функций также эффективнее с использованием ссылки. Протокол возврата ссылок устраняет необходимость копировать объект во временное хранилище перед возвратом.

Типы возврата ссылок также могут оказаться полезными, если результатом функции должно быть l-значение. Большинство перегруженных операторов относятся к этой категории, в частности оператор присваивания. Перегруженные операторы описаны в разделе Перегруженные операторы.

Пример

Рассмотрим пример 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";
}

Вывод

x = 7
y = 9

Обратите внимание, что функции x и y объявляются как типы возвращаемых ссылок. Эти функции можно использовать на любой стороне оператора присваивания.

Объявления ссылочных типов должны содержать инициализаторы. Исключение составляют следующие случаи.

  • Явное объявление extern

  • Объявление члена класса

  • Объявление в классе

  • Объявление аргумента в адрес функции или возвращаемого типа для функции

См. также

Ссылки

Ссылки (C++)