Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
1

Механизм возврата ссылки на переменную

02.05.2010, 13:21. Просмотров 1349. Ответов 4
Метки нет (Все метки)

Здравствуйте!
Не совсем понятен механизм возвращения из функции типа "ссылка на.." и использование функции в выражениях в качестве левого, от знака равно операнда. трудности с пониманием и восприятием.
может ли кто нибудь объяснить что это, с чем едят, как происходит и зачем применяют???

п.с.
как я понимаю:
например есть такой код
C
1
2
3
4
5
int x;
int& retx()
{
   return x;
}
Из этой функции видно, что тип возвращаемого значения - int&.
теперь у нас появляется возможность записать вот так: retx() = 101; в рез-те чего станет x = 101.
как я понимаю механизм: эта функция возвращает ссылку на переменную, указанную после return (в нашем случае это x) Т.е. выполнилась у нас функция и готова вернуть икс. если мы употребим retx() справа от равно то получим как бы обычный вариант употребления функций. если употребим слева - то получим возможность произвести присваивание, так, как я показал выше. отсюда напрашивается вывод - возвращение ссылки - способ предназначеный для возможности использования функции слева. но зачем это нужно и где полезно?? для чего это придумали?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2010, 13:21
Ответы с готовыми решениями:

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

В чем разница между exit(код возврата) и ExitProcess (код возврата)?
Я так себе представляю, имеется два варианта выхода из приложения, с передачей кода возврата: 1....

Возврат ссылки на локальную переменную
Привет, есть такой код: int*& change(void) { int* x(new int(50)); return x; } int...

Возвращение ссылки на локальную переменную
Заметил недавно одну интересную вещь. Как вообще работает такой код? Причем коректно. int& func();...

4
1257 / 795 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
02.05.2010, 13:26 2
Представь массив: операция [i] - возвращает ссылку на элемент, поэтому можно
спокойно присвоить значение любому элементу массива..
Возвращение значения(не ссылки), не позволяет делать = для операции [i] или функции, потому как это не корректно, то есть куда ты этим = хочешь присвоить???

Добавлено через 30 секунд
Вне куда...
0
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
02.05.2010, 14:25  [ТС] 3
ясно.а мои умозаключения насколько верны?
0
1257 / 795 / 108
Регистрация: 16.09.2009
Сообщений: 2,010
02.05.2010, 15:33 4
Твои заключения верны, на сколько это судить не мне.

Ссылка должна ссылается(желательно): на то что существует еще до вызова функции...
X существует до вызова retx: он глобальный.

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

Добавлено через 9 минут
Вот тебе для разнообразия как еще допустимо:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int x=100;
int* retx();
 
int main(){
*retx()=10;
cout<<x;
 
return 0;
}
 
 
int* retx()
{
return &x;
}
1
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
02.05.2010, 15:43  [ТС] 5
До указателей пока не дошел) Но в общих чертах все понял
Спасибо.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.05.2010, 15:43

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Изучаю C# по книге Шилдта. И не могу понять принцип возврата из метода и возврата значения
Объясните пожалуйста простыми словами

Передать значение ссылки в переменную
&lt;!-- организационная структура--&gt; &lt;script&gt; function toggle(node, idVl) { dvS =...

Создать ссылки на переменную в другом агенте
Здравствуйте! Проблема следующая. Есть два агента main и DDD. В агенте main есть переменная f в...

Превращение ссылки на переменную в полноценную копию
Здравствуйте! Извините за немного непонятный заголовок темы, терминологию в конкретно этой теме...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.