Форум программистов, компьютерный форум CyberForum.ru

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 21, средняя оценка - 4.62
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
#1

Возврат значения по ссылке - C++

01.06.2011, 21:50. Просмотров 2845. Ответов 18
Метки нет (Все метки)

Долго гуглил, но что-то так и не понял. Почему слева от знака = может использоваться только функция, возвращающая ссылку?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2011, 21:50     Возврат значения по ссылке
Посмотрите здесь:

Как происходит возврат значения по ссылке? - C++
Добрый вечер, распишите пожалуйста детально про то, как происходит возврат значения по ссылке. Можно вот на этом примере: alpha&...

Возврат по ссылке - C++
Вычитал давно еще, что если возвращать статический обьект из метода и присвоить его констатной ссылке то он продолжить жить пока видима эта...

Возврат по ссылке - C++
Приветствую всех! Есть пример из книги Р. Лафоре "Объекто-ориентированное программирование в C++": #include <iostream> using...

Наследование, возврат по ссылке.. - C++
Есть такое :wall:Я не могу понять, как реализовать :help: :wall:Подсказывать, как это можно сделать. :help: Вот мой #include...

Возврат результата из функции через параметр по ссылке - C++
Здравствуйте уважаемый форумчане! Подскажите, как вернуть результат работы функции по ссылке? Как передавать параметр по ссылке в функцию я...

Повторный возврат рандомного значения ,без изменения значения - C++
Добрый день. Пишу простую консольную игру Кости. Есть 4-е функции прорисовки костей (2-е на кости игрока и 2-е на кости ПК). Каждая...

Возврат значения С++ - C++
Hi people! Вот такое задание: 1) Реализовать заданную динамическую структуру данных, с которой можно работать через перегруженные...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
besstiaa
94 / 94 / 7
Регистрация: 04.06.2010
Сообщений: 223
01.06.2011, 22:33     Возврат значения по ссылке #2
Это о чем речь?)) Пример?
AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
01.06.2011, 22:35     Возврат значения по ссылке #3
погугли на темы lvalue rvalue.
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:38     Возврат значения по ссылке #4
f() = 1;
Так что ли? Советую не извращаться таким способом.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:47     Возврат значения по ссылке #5
это не извращения, это стандартный способ для записи выражений типа
C++
1
2
i=j=k=10;
cout << i << k << l << '\n';
без возврата по ссылке эти операции были бы невыполнимы
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 22:51     Возврат значения по ссылке #6
OstapBender, речь шла о знаке =
AlexP11223
36 / 37 / 4
Регистрация: 20.04.2011
Сообщений: 288
01.06.2011, 22:52  [ТС]     Возврат значения по ссылке #7
например, задание из Лафоре
В некоторых компьютерных языках, таких, как Visual Basic, есть опера-
ции, с помощью которых можно выделить часть строки и присвоить ее
другой строке. (В стандартном классе string предложены различные под-
ходы.) Используя наследование, добавьте такую возможность в класс
Pstring из упражнения 2. В новом производном классе Pstring2 разместите
три новых функции: left(), mid() и right().
C++
1
2
3
4
5
6
s2.1eft ( s1, n ) // в строку s2 помещаются n саных левых
// символов строки sl
s2.mid ( s1, s, n ) // в стэоку s2 понещаются n символов из строки
// начиная с сиивола номер s
s2.right ( s1, n ) // в строку s2 помещаются n самых правых
// символов строки s1
Вы можете использовать цикл for для копирования символ за символом
подходящих частей строки sl во временный объект класса Pstring2, который затем их возвратит. Для получения лучшего результата используйте
в этих функциях возврат по ссылке, чтобы они могли быть использованы
с левой стороны знака «равно» для изменения части существующей строки.

Еще раньше было упоминание этого для функции доступа к массиву (вместо []).
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 22:52     Возврат значения по ссылке #8
Потому что если возвращается значение (а не ссылка на значение) то возвращается только копия объекта, а не сам объект. Когда же ты возвращаешь ссылку то функция вернёт ссылку на твой объект, который ты уже можешь изменять (если ссылка не константная).
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 22:55     Возврат значения по ссылке #9
Цитата Сообщение от slice Посмотреть сообщение
OstapBender, речь шла о знаке =
ну, а мой пример c i=j=k=10; не демонстрирует это?
= - это и есть функция class& operator=()
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:04     Возврат значения по ссылке #10
Цитата Сообщение от OstapBender Посмотреть сообщение
а мой пример c i=j=k=10; не демонстрирует это?
Нет, не демонстрирует. Тут приоритет операций следующий: i=(j=(k=10)). И где же здесь присваивание тому, что вернула функция? А вот такое ((i=j)=k)=10 это извращение, и все граммотные програмисты запрещают делать такое присваивание, вовращая не простую а константную ссылку.
Что скажешь, умник?
Gepar
1175 / 531 / 20
Регистрация: 01.07.2009
Сообщений: 3,517
01.06.2011, 23:09     Возврат значения по ссылке #11
Так у вас же функций нет, автор вероятно имел в виду

int &a()
{}
...
a()=3;
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
01.06.2011, 23:12     Возврат значения по ссылке #12
slice,
C++
1
2
vector<int> n(1);
n[0] = 0;
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:19     Возврат значения по ссылке #13
gooseim
Я же ясно написал, что запись f()=1 я считаю извращением. С какой целью ты приводишь мне другие примеры (припася, скорее всего, в кармане тезис "Оператор - это тоже функция"), мне не понятно.
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
01.06.2011, 23:24     Возврат значения по ссылке #14
slice, ок
C++
1
2
vector<int> n(1);
n.at(0) = 1;
В некоторых компиляторах нет operator[] для вектора. Как тогда? Вообще не обращаться по индексу, считая это извращением?
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:32     Возврат значения по ссылке #15
gooseim, да, этот код ужасен, нужно срочно переписывать такие компиляторы.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
01.06.2011, 23:46     Возврат значения по ссылке #16
Цитата Сообщение от slice Посмотреть сообщение
Нет, не демонстрирует.
ну ок согласен, ошибся, в случае с = & используется для удобства

Цитата Сообщение от slice Посмотреть сообщение
припася, скорее всего, в кармане тезис "Оператор - это тоже функция"
и что? потому что так и есть
и arr[i]=0; хороший пример.
slice
34 / 77 / 4
Регистрация: 04.11.2010
Сообщений: 249
01.06.2011, 23:52     Возврат значения по ссылке #17
OstapBender, и чё?
gooseim
Эксперт С++
508 / 412 / 37
Регистрация: 23.09.2010
Сообщений: 1,159
01.06.2011, 23:55     Возврат значения по ссылке #18
OstapBender, имелся ввиду внешний вид, а не содержание.
Тут как говорится на вкус и цвет. По моему мнению функция для матрицы Element& get(X, Y) меньшее извращение, чем две функции Element get(X, Y) и set(X, Y, Element), и уж куда меньшее извращение, чем вспомогательные классы для записи [][].
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 10:52     Возврат значения по ссылке
Еще ссылки по теме:

Возврат значения функции - C++
Что такое возврат значения функции? я уже всю голову изломал, что и куда возвращается? в гугле нашёл мол возвращается результат (куда? в...

Возврат значения из operator= - C++
Товарищи идет ли разрушение пир такой вот штуке, вызывается ли тут деструктор? Тексты надо переписывать в сообщение!

Возврат значения из функции - C++
Добрый вечер. Вопрос следующий , как возвратить из функции create последнее значение ЛС , чтоб в дальнейшем использовать в main. ...

Возврат значения из полиморфной функции - C++
Доброго времени суток всем. Ребят не знаю как правильно сформулировать свой вопрос. Суть вот в чем: В базовом классе Cell определена...

Возврат копии значения из функции - C++
Сегодня нашел информацию о том, что можно сохранять ссылку на временный объект, например #include &lt;iostream&gt; int foo() { int...


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

Или воспользуйтесь поиском по форуму:
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
02.06.2011, 10:52     Возврат значения по ссылке #19
gooseim, А по-моему мнению более удобно перегрузить оператор () (X, Y)... Хотя и get и get/set тоже неплохо. По крайней мере get будет константной возвращающей конст ссылку, а set неконстантной ничего не возвращающей. Что несколько более понятно. Функция должна выполнять только 1 вещь (что не всегда возможно впринципе).
Yandex
Объявления
02.06.2011, 10:52     Возврат значения по ссылке
Ответ Создать тему
Опции темы

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