Кент Рейсдорф. BORLAND C++BUILDER. Раздел 1

Кент Рейсдорф. BORLAND C++BUILDER. Страница 61

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

Ссылки нельзя установить в 0 или NULL, как указатели. Это означает, что вы должны следить за тем, чтобы не применить к ссылке оператор delete дважды. Ссылки и указатели часто выполняют одни и те же функции, но не обладают универсальностью. В одних ситуациях удобнее использовать ссылку, в других — указатель.

Передача аргументов функции с использованием ссылок и указателей

Ранее я говорил о передаче функции аргументов по значению. Я также говорил, что для структур и классов передача по ссылке обычно предпочти­тельнее. По ссылке можно передать любой объект. Это относится не только к структурам и классам, но и к простым типам данных, таким, как int или long. При передаче аргументов по значению, функции передается не сам объект, а его копия. При передаче по ссылке функция получает указатель на объект. Это имеет два основных следствия. Во-первых, функция может изменить объект, переданный по ссылке. Во-вторых, исключаются накладные расходы, связанные с созданием копии объекта.

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

void IncrementPosition(int& xPos, int& yPos) {

xPos++; yPos++;

}

int x = 20; int у = 40;

IncrementPosition(x, y); // теперь x равно 21, а у равно 41

Обратите внимание, что после завершения работы функции оба аргумента увеличились на единицу. Это произошло потому, что функция изменяет сами объекты через указатели (вспомните, что ссылка — это разновидность ука­зателя).

Web-дизайн (с) 2010 All rights reserved