![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
ioManip |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 12.8.2011 Где: Благовещенск Репутация: нет Всего: нет |
Здравствуйте! Подскажите, как вернуть из функции более одного значения?(при помощи ссылок)
Если можно с примерчиком) --------------------
Мечты не работают, пока ты не работаешь! |
|||
|
||||
Фантом |
|
|||
![]() Вы это прекратите! ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1516 Регистрация: 23.3.2008 Репутация: нет Всего: 49 |
Проще сразу привести примерчик - функцию scanf. Она именно это и делает.
|
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Наиболее известный для постSTL'ного поколения С++-программистов пример возврата значения по ссылке - переопределение оператора "<<" в потоках.
Вернуть более одного значения С/C++ не может. Но гибкость языка позволяет решать эту задачу косвенными способами: -изменять значения объектов, переданных в функцию по указателю или по ссылке -глобальные переменные -либо переменные в области видимости (пример - функция-метод класса изменяет значения членов класса-данных -возвращать объект (юнион, класс, структуру, массив, выделенную область памяти, заполненую и т.д.), либо указатель на подобный объект, либо посредством ссылки на объект. Так что нужно именно? Это сообщение отредактировал(а) akizelokro - 22.9.2013, 20:02 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
||||
|
||||
volatile |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2107 Регистрация: 7.1.2011 Репутация: 37 Всего: 85 |
Если именно 2 значения нужно вернуть, можно обойтись и без определения своей структуры, задействовав std::pair, и make_pair
|
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
? -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Написано, как вернуть из функции. Я и поинтересовался. Потому что "функция возвращает значение по ссылке" это одно, кажется, а изменяет значение - другое. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Это понятно. Как и то, что до 10 значений в С++11 можно вернуть через std::tuple. Либо, кажись так (хоть в любом случае, ни std::tuple, ни вариант ниже формально не возвращение нескольких значений по ссылке)
Но я так и не понял, что именно нужно из самого вопроса. Это сообщение отредактировал(а) akizelokro - 23.9.2013, 02:36 -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
ioManip |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 162 Регистрация: 12.8.2011 Где: Благовещенск Репутация: нет Всего: нет |
Вот как написано в задании: "Функция должна возвращать несколько значений, для этого использовать ссылки". Я тоже начал с этой мысли, но после этого туман) Поэтому и обращаюсь к Вам. --------------------
Мечты не работают, пока ты не работаешь! |
|||
|
||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Сделай и так, и так одновременно, если там больше ничего нет более подробного (примеров каких-то или дополнительных условий). Передавай два аргумента в функции по ссылке, значения двух из них меняй в функции, а одно из них навроде предложения volatile. Потому что я не думаю, что там говорится о том, чтобы функция возвращала результат-временную переменную, приравнивая её значение константной ссылке навроде.. траляля-тополя. Вообщем, я тебе ещё больше могу только усложнить, Возвращение значения по ссылке -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Вы уж больно придираетесь к словам. Всю жизнь говорили о значениях, передаваемых из вызванной функции в вызывающую по ссылке или по адресу, как о возвращаемых значениях, а тут вот нельзя почему-то.
-------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Я не придираюсь, я просто переспросил. Меня вдруг в памяти что-то торкнуло, что там что-то есть ещё. А дальше мне поставили минус за вроде бы правильно написанный спич и в любом случае, я долго не работал, и заодно узнал(вспомнил) интересную "фенечку", когда функция стоит слева от знака равенства. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
![]()
![]() -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
||||
|
|||||
akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Ладно, чёрт с ним с минусиком, у меня задачи другие.
Я как увидел, заулыбался, вот, думаю, будет забавная шняга ![]() По поводу вопроса. Я ещё нашёл два источника, в котором как термин фигурирует "возвращение значения по ссылке". Как я понял, это что-то народе вида
Единственное условие, что время жизни объекта должно быть дольше существования функции (можно возвращать глобальную переменную или параметр, переданный в функцию по ссылке, либо же, возможно, приравнивать возвращаемое значение константной ссылке. Осталось только определить, действительно ли так воспринимает этот термин составитель задачи. Это сообщение отредактировал(а) akizelokro - 23.9.2013, 16:38 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
feodorv |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2214 Регистрация: 30.7.2011 Репутация: 11 Всего: 45 |
Думаю, что нет, поскольку не "по ссылке", а -------------------- Напильник, велосипед, грабли и костыли - основные инструменты программиста... |
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |