Возвращаемая ссылка в C++

Vozvrasaemaa Ssylka V C



C++ предоставляет возможность возвращать значение или адрес по ссылке, а не по указателям. Использование ссылок вместо указателей может упростить чтение и управление программой C++. В C++ ссылки и указатели тесно связаны друг с другом. Основное отличие состоит в том, что, хотя ссылки — это всего лишь альтернативное имя, «псевдоним» другой переменной, указатели могут использоваться в таких операциях, как добавление значений. Ссылка представляет собой альтернативное имя или дубликат исходного значения и обозначается символом «&».

Пример 1:

Мы импортируем заголовочный файл «iostream», а затем используем пространство имен «std». Файлы заголовков импортируются в коды C++, поскольку определено множество функций. Затем мы создаем функцию возвращаемой ссылки, помещая символ «&» рядом с именем функции «returnTheValue».







Здесь теперь вставлена ​​ссылка на «значение». Ниже мы печатаем значение и адрес со ссылкой «&value». Затем мы помещаем ссылку на возврат и помещаем «значение». Теперь здесь вызывается «main()», и мы инициализируем «n1» значением «44». Ниже этого «int& n2» инициализируется с помощью «returnTheValue(n1)». Теперь мы печатаем значение «n1», а также его адрес. Затем мы печатаем значение «n2», а также адрес «n2», используя «cout».



Код 1:



#include
использование пространства имен std;
интервал & returnTheValue ( интервал & ценить )
{
расчет << 'Значение = ' << ценить << конец
<< 'Адрес значения'
<< & ценить << конец;
возвращаться ценить;
}
int главный ( )
{
ты n1 = 44 ;
интервал & n2 = возврат значения ( n1 ) ;
расчет << 'n1 = ' << n1 << конец
<< 'Адрес n1: '
<< & n1 << конец;
расчет << 'n2 = ' << n2 << конец
<< 'Адрес n2'
<< & n2 << конец;
возвращаться 0 ;
}


Выход:





Здесь мы можем отметить, что ссылка — это всего лишь альтернативное имя другой переменной, как показано ниже. Как адрес значения, «n1» и «n2» никогда не меняются.



Пример 2:

Мы используем пространство имен «std» после импорта заголовочного файла «iostream». Далее мы используем имя функции «MyReturnValueFunc» и символ «&» для создания возвращаемой ссылочной функции. Здесь размещается ссылка на переменную «v1». Мы печатаем значение и адрес со ссылкой «&v1» под ними. Затем мы вставляем «ссылку на возврат», используя «return» и «v1» в этом месте. Здесь вызывается «main()», а «num_1» инициализируется значением «19». Инициализация «int& num_2» выполняется с помощью «MyReturnValueFunc(num_1)».

В настоящее время мы печатаем значение и адрес «num_1» и, используя «cout», печатаем значение и адрес «num_2». Теперь мы изменяем значение «num_1», используя адрес, возвращаемый здесь «MyReturnValueFunc». Эта функция возвращает альтернативное имя «v1», которое также является альтернативным именем «num_1». Итак, мы меняем его значение и устанавливаем на «91». Мы присваиваем «91» значению «MyReturnValueFunc(num_1)», которое здесь действует как псевдоним. Затем мы снова печатаем значение и адрес «num_1».

Код 2:

#include
использование пространства имен std;
интервал & MyReturnValueFunc ( интервал & v1 )
{
расчет << 'Значение v1 = ' << v1 << конец
<< 'Адрес переменной v1: '
<< & v1 << конец;
возвращаться v1;
}
int главный ( )
{
целое число_1 = 19 ;
интервал & num_2 = МояВозвратЗначенияФунк ( номер_1 ) ;
расчет << 'Значение num_1 = ' << номер_1 << конец
<< 'Адрес num_1: '
<< & номер_1 << конец;
расчет << 'Значение num_2 = ' << номер_2 << конец
<< 'Адрес num_2: '
<< & номер_2 << конец;
MyReturnValueFunc ( номер_1 ) '=' 91 ;
расчет << 'Теперь значение num_1 = ' << номер_1 << конец
<< 'Адрес num_1: '
<< & номер_1 << конец;
возвращаться 0 ;
}


Выход:

Как показано ниже, мы видим, что ссылка — это просто альтернативное имя для другой переменной, поскольку адрес значений «v1», «num_1» и «num_2» остался постоянным:

Пример 3:

Импортируется заголовочный файл «iostream» и используется пространство имен «std». Поскольку в заголовочных файлах указано множество функций, мы импортируем их в коды C++. Здесь мы создаем функцию «ReturnRefFun()», в которую помещаем «int& my_ref», которая возвращает ссылку. «int& ReturnRefFun» здесь объявлен как ссылочная функция. После этого мы увеличиваем значение переменной «my_ref». Ниже мы помещаем return, который возвращает ссылку на my_ref.

После этого здесь вызывается метод main(). Затем мы инициализируем переменную «first_value» значением «21». Ниже мы возвращаем копию ссылки, помещая «first_value» в функцию «ReturnRefFun» и сохраняя ее в переменной «copied_value». Затем мы печатаем как «first_value», так и «copied_value», используя «cout». Ниже мы увеличиваем переменную «copied_value», помещая «copied_value++». Затем мы печатаем «copied_value» после его увеличения и «first_value», используя «cout». После этого мы возвращаем ссылку с помощью инициализации переменной «int& ref_value» с помощью «ReturnRefFun(first_value)».

После этого мы печатаем значение переменной «my_ref», которую мы скопировали. Затем мы печатаем значение переменной «first_value». Ниже мы увеличиваем значение «ref_value», помещая «ref_value++». Ниже мы печатаем увеличенное значение «ref_value», а также переменную «first_value» с помощью «cout». При изменении «ref_value» также изменится «first_value».

Код 3:

#include
использование пространства имен std;
интервал & ВозвратRefFun ( интервал & мой_ref ) {
мой_ref++;
возвращаться мой_ref;
}
int главный ( ) {
интервал первое_значение '=' двадцать один ;
интервал скопированное_значение =ReturnRefFun ( первое_значение ) ;
расчет << 'Первое значение: ' << первое_значение << конец;
расчет << 'Скопированное значение: ' << скопированное_значение << конец;
скопированное_значение++;
расчет << 'Скопированное_значение увеличивается: ' << скопированное_значение << конец;
расчет << 'Первое значение: ' << первое_значение << конец;
интервал & ref_value =ReturnRefFun ( первое_значение ) ;
расчет << 'Скопированное значение ссылки: ' << ref_value << конец;
расчет << 'Первое значение: ' << первое_значение << конец;
ref_value++;
расчет << «Опорное значение увеличивается:» << ref_value << конец;
расчет << 'Первое значение: ' << первое_значение << конец;
возвращаться 0 ;
}


Выход:

Вот результат предыдущего кода, в котором мы использовали технику «возврата ссылки». В примере показано различие между возвратом дубликата ссылочной переменной и возвратом самой ссылочной переменной.

Пример 4:

Здесь «int& rByRef» объявлен как ссылочная функция, которая возвращает ссылочную переменную. Мы передаем «int& data» в эту функцию «int& rByref()». Здесь мы печатаем адрес переменной «data», а затем используем ссылку на возврат ниже нее. Теперь мы инициализируем переменную «x_var» после вызова метода «main()». Затем мы печатаем здесь адрес «x_var», помещая «&x_var» в «cout».

При этом мы используем ссылочную переменную, присваивая «rByref(x_var)» переменной «int& y_var». Затем мы также печатаем адрес этой ссылочной переменной «&y_var». Ниже мы копируем переменную «x_var» в переменную «z_var», а также печатаем адрес этой скопированной переменной — «&z_var». После этого мы вызываем функцию «rByref()», передаем в качестве параметра внутри нее переменную «x_var» и присваиваем этой переменной «93». Мы также снова визуализируем адрес «x_var», помещая «&x_var» в «cout».

Код 4:

#include
использование пространства имен std;
интервал & rByref ( интервал & данные )
{
расчет << 'Адрес данных: ' << & данные << конец;
возвращаться данные;
}
int главный ( )
{
интервал x_var = 42 ;
расчет << 'Адрес x_var: ' << & x_var << конец;
интервал & y_var = rByref ( x_var ) ;
расчет << 'Адрес y_var: ' << & y_var << конец;
int z_var = rByref ( x_var ) ;
расчет << 'Адрес z_var: ' << & z_var << конец;
rByref ( x_var ) '=' 93 ;
расчет << 'Адрес x_var: ' << & x_var << конец;
возвращаться 0 ;
}


Выход:

Результат ясно показывает, что адрес клонированной переменной «z_var» отличается от всех других мест, на которые ссылается исходная переменная «x_var».

Заключение

Концепция «возвратной ссылки» подробно рассматривается в этом уроке. Мы узнали, что «обратная ссылка» аналогична «указателям» в программировании на C++. Мы обсуждали, что для указания того, какая функция возвращает ссылку, необходимо использовать символ «&» с типом возвращаемого значения функции. В этом уроке мы проиллюстрировали несколько примеров и их результаты и поняли эту концепцию.