Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
limelight
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
#1

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

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

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

п.с.
как я понимаю:
например есть такой код
C
1
2
3
4
5
int x;
int& retx()
{
   return x;
}
Из этой функции видно, что тип возвращаемого значения - int&.
теперь у нас появляется возможность записать вот так: retx() = 101; в рез-те чего станет x = 101.
как я понимаю механизм: эта функция возвращает ссылку на переменную, указанную после return (в нашем случае это x) Т.е. выполнилась у нас функция и готова вернуть икс. если мы употребим retx() справа от равно то получим как бы обычный вариант употребления функций. если употребим слева - то получим возможность произвести присваивание, так, как я показал выше. отсюда напрашивается вывод - возвращение ссылки - способ предназначеный для возможности использования функции слева. но зачем это нужно и где полезно?? для чего это придумали?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.05.2010, 13:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Механизм возврата ссылки на переменную (C++):

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

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

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

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

Записать день в переменную d,месяц в переменную m, год в переменную y - C++
Как можно получить системную дату? Мне надо записать день в переменную d,месяц в переменную m, год в переменную y Заранее Спасибо!

Функция возврата массива - C++
Элементы матрицы заданы соотношением:a_(i,j) =(ln^2i/(1.5-7j))^3+e^(i+j). Пользуйтесь редактором формул внизу страницы Переписываю,...

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

Добавлено через 30 секунд
Вне куда...
0
limelight
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
02.05.2010, 14:25  [ТС] #3
ясно.а мои умозаключения насколько верны?
0
Genius Ignat
1237 / 775 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
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
limelight
8 / 8 / 0
Регистрация: 17.04.2010
Сообщений: 112
02.05.2010, 15:43  [ТС] #5
До указателей пока не дошел) Но в общих чертах все понял
Спасибо.
0
02.05.2010, 15:43
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.05.2010, 15:43
Привет! Вот еще темы с ответами:

Зачем нужны rvalue ссылки, если есть универсальные ссылки - C++
Читаю книгу Скотта Мэйерса... Что-то я совсем запутался с этими rvalue ссылками. Я не пойму, зачем нужны rvalue ссылки, если есть...

Поясните по записи возврата из ф-ции - C++
Вот так люди пишут? int foo() { int n=0; cin&gt;&gt;n; return std::move(n); }

Способы возврата данных из функции - C++
какими способами можно возвратить данные из функции(передать копию, адрес или ссылку)?????

функция возврата булевого значения - C++
Здравствуйте!Помогите пожалуйста,объясните! вот есть функция : bool check_signs(char a,char *signs) { int i; for...


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

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

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