Применение ссылок при работе с функциями

В языке C++ появился новый механизм работы с переменными — ссылки. Функция swap() работала правильно, только не слишком удобно применять постоянное разыменование указателей.

С помощью ссылок функция swap() может выглядеть аккуратнее.

void swap(int& a, int& b)

{

int temp = a;

a = b;

b = temp;

}

Т.к. ссылка является синонимом имени переменной, то вызов функции будет выполнен без взятия адреса переменных:

swap(x, y);

Конструкция int& объявляет ссылку на переменную типа int. При таком объявлении функции в стек будут положены не значения переменных, а их адреса.

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

· Ссылка должна быть проинициализирована.

· Ссылка не может быть равна NULL.

Для взятия адреса переменной и для объявления ссылки используется одинаковый символ — & (амперсанд). Понять, чем является & в каждом конкретном случае несложно, если помнить следующее правило:

Если & используется при объявлении переменной, то такая переменная будет являться ссылкой. Во всех остальных случаях (кроме логических операций) & будет означать взятие адреса от переменной.

На начальном этапе за рамками рассмотрения остается приведение типов ссылок (приведение ссылочных типов может привести к генерации исключения).

Примеры:

int x; //объявление переменной целого типа

int* p; //объявление указателя на переменную целого типа

int& r = x; // объявление ссылки на значение целого типа

int* &rp = p; // объявление ссылки на указатель, указывающий на переменную целого типа

int& rr; // ошибка компиляции. Ссылка должна быть проинициализирована

p = &x; //присвоить p адрес переменной x

x = *p; //присвоить x значение, которое находится по адресу, сохраненному в p

Возможен и такой вариант:

int *p; // объявление неинициализированного указателя на переменную целого типа

int **pp = &p; // объявление указателя на указатель и инициализация его адресом, по которому

//размещен указатель p

Логические операции:

(a == 0) && (b!=0) - логическое И

(a & b) - побитовая операция И (пример: a = 01010101; b = 00001111; a & b = 00000101)



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: