С++ для начинающих



         

Параметры-ссылки


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

В каких случаях применение параметров-ссылок оправданно? Во-первых, тогда, когда без использования ссылок пришлось бы менять типы параметров на указатели (см. приведенную выше функцию swap()). Во-вторых, при необходимости вернуть из функции несколько значений. В-третьих, для передачи большого объекта типа класса. Рассмотрим два последних случая подробнее.

Как пример функции, использующей параметр-ссылку для возврата дополнительного значения, возьмем look_up(), которая будет искать заданную величину в векторе целых чисел. В случае успеха look_up() вернет итератор, указывающий на найденный элемент, иначе– на элемент, расположенный за конечным. Если величина содержится в векторе несколько раз, итератор будет указывать на первое вхождение. Кроме того, дополнительный параметр-ссылка occurs возвращает количество найденных элементов.

#include <vector>

// параметр-ссылка 'occurs'

// содержит второе возвращаемое значение

vector<int>::const_iterator look_up(

    const vector<int> &vec,

    int value,     // искомое значение

    int &occurs )  // количество вхождений

{

    // res_iter инициализируется значением

    // следующего за конечным элемента

    vector<int>::const_iterator res_iter = vec.end();

    occurs = 0;

    for ( vector<int>::const_iterator iter = vec.begin();

             iter != vec.end();

             ++iter )

        if ( *iter == value )

        {

            if ( res_iter == vec.end() )

                res_iter = iter;

            ++occurs;

        }

    return res_iter;

}

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




Содержание  Назад  Вперед