Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Общие вопросы > Возврат значений из функции |
Автор: ioManip 22.9.2013, 06:24 |
Здравствуйте! Подскажите, как вернуть из функции более одного значения?(при помощи ссылок) Если можно с примерчиком) |
Автор: Фантом 22.9.2013, 12:47 |
Проще сразу привести примерчик - функцию scanf. Она именно это и делает. |
Автор: akizelokro 22.9.2013, 19:31 |
Наиболее известный для постSTL'ного поколения С++-программистов пример возврата значения по ссылке - переопределение оператора "<<" в потоках. Вернуть более одного значения С/C++ не может. Но гибкость языка позволяет решать эту задачу косвенными способами: -изменять значения объектов, переданных в функцию по указателю или по ссылке -глобальные переменные -либо переменные в области видимости (пример - функция-метод класса изменяет значения членов класса-данных -возвращать объект (юнион, класс, структуру, массив, выделенную область памяти, заполненую и т.д.), либо указатель на подобный объект, либо посредством ссылки на объект. Так что нужно именно? |
Автор: volatile 22.9.2013, 21:51 | ||
можно еще так, прямо в лоб
|
Автор: volatile 22.9.2013, 22:18 |
Если именно 2 значения нужно вернуть, можно обойтись и без определения своей структуры, задействовав std::pair, и make_pair |
Автор: feodorv 22.9.2013, 22:23 | ||
? |
Автор: akizelokro 23.9.2013, 02:15 | ||||
Это понятно. Как и то, что до 10 значений в С++11 можно вернуть через std::tuple. Либо, кажись так (хоть в любом случае, ни std::tuple, ни вариант ниже формально не возвращение нескольких значений по ссылке)
Но я так и не понял, что именно нужно из самого вопроса. |
Автор: ioManip 23.9.2013, 04:34 |
Вот как написано в задании: "Функция должна возвращать несколько значений, для этого использовать ссылки". Я тоже начал с этой мысли, но после этого туман) Поэтому и обращаюсь к Вам. |
Автор: akizelokro 23.9.2013, 05:05 | ||
Сделай и так, и так одновременно, если там больше ничего нет более подробного (примеров каких-то или дополнительных условий). Передавай два аргумента в функции по ссылке, значения двух из них меняй в функции, а одно из них навроде предложения volatile. Потому что я не думаю, что там говорится о том, чтобы функция возвращала результат-временную переменную, приравнивая её значение константной ссылке навроде.. траляля-тополя. Вообщем, я тебе ещё больше могу только усложнить, http://c-p-p.info/index.php/cpp-oop/%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%B8/188-%D0%B2%D0%BE%D0%B7%D0%B2%D1%80%D0%B0%D1%89%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D1%8F-%D0%BF%D0%BE-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D0%B5 |
Автор: feodorv 23.9.2013, 05:16 | ||||
Вы уж больно придираетесь к словам. Всю жизнь говорили о значениях, передаваемых из вызванной функции в вызывающую по ссылке или по адресу, как о возвращаемых значениях, а тут вот нельзя почему-то.
|
Автор: akizelokro 23.9.2013, 05:34 | ||
Я не придираюсь, я просто переспросил. Меня вдруг в памяти что-то торкнуло, что там что-то есть ещё. А дальше мне поставили минус за вроде бы правильно написанный спич и в любом случае, я долго не работал, и заодно узнал(вспомнил) интересную "фенечку", когда функция стоит слева от знака равенства. |
Автор: feodorv 23.9.2013, 08:52 | ||||
![]()
![]() |
Автор: akizelokro 23.9.2013, 16:38 | ||
Ладно, чёрт с ним с минусиком, у меня задачи другие. Я как увидел, заулыбался, вот, думаю, будет забавная шняга ![]() По поводу вопроса. Я ещё нашёл два источника, в котором как термин фигурирует "возвращение значения по ссылке". Как я понял, это что-то народе вида
Единственное условие, что время жизни объекта должно быть дольше существования функции (можно возвращать глобальную переменную или параметр, переданный в функцию по ссылке, либо же, возможно, приравнивать возвращаемое значение константной ссылке. Осталось только определить, действительно ли так воспринимает этот термин составитель задачи. |
Автор: feodorv 24.9.2013, 15:59 | ||
Думаю, что нет, поскольку не "по ссылке", а |