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

return зачем он? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.63
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
19.05.2013, 17:25     return зачем он? #1
Сколько бы книжек не перечитывал, так и не понял, зачем же все таки нужен return. Что значит: функция возвращает значение и что такое возврат значения вообще?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
henecs
 Аватар для henecs
16 / 16 / 0
Регистрация: 19.05.2013
Сообщений: 135
19.05.2013, 17:49     return зачем он? #2
это как волосы, они вроде не нужны но они есть
dickivs
 Аватар для dickivs
46 / 46 / 6
Регистрация: 25.11.2011
Сообщений: 267
19.05.2013, 17:51     return зачем он? #3
оператор
C++
1
return
служит для возврата в точку где была активирована функция, т.е. говоря простым языком, если функция возвращает результат, оператор
C++
1
return выражение;
оценивает выражение и возвращает его значение вызывающему. Если функция не возвращает результата (т.е. она имеет возвращаемый тип void), управление возвращается, когда программа достигает оканчивающей функцию фигурной скобки или при исполнении оператора
C++
1
return;
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
19.05.2013, 19:16  [ТС]     return зачем он? #4
dickivs, а если еще проще
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
19.05.2013, 19:28     return зачем он? #5
Функция есть подпрограмма, возвращающая некое значение через собственное имя. Например,
C++
1
y=sin(x);
sin - функция, она вычисляет значение, в данном примере его надо присвоить переменной y, но в правой части оператора присваивания вместо значения указано имя самой функции. Процедура есть подпрограмма, которая так не может. Процедура в принципе может вернуть значение, только двумя способами: через параметр и через внешнюю по отношению к процедуре переменную. void функции формально тоже всегда возвращают значения, но специального типа без данных, в отличие от процедур, которые могут вообще ничего не возвращать, кроме управления. Вот return и возвращает значение через имя функции, то есть в результате его выполнения вся функция становится равна его операнду и её можно присвоить переменной, или передать в параметр другой функции, или в операнд любого другого оператора.
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
19.05.2013, 20:20     return зачем он? #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ryuk,
Вот тебе проще

Если хочешь сделать из функции переменную, задаешь функции тип и пишешь return что-то.
Это что-то ты вычисляешь внутри функции, чтобы потом использовать из любого места программы в зависимости от чего-то там.

если не хочешь делать из функции переменную, то пишешь без return
C++
1
2
3
 void func()
{
}
===================
если ты сделал из функции что-то типа переменной, то ты можешь складывать, вычитать, умножать такие функции.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
using namespace std;
 
 
int func1()
{
    return 5;
}
 
int func2()
{
    return 10;
}
 
int main()
{           
        cout<<func1()+func2();
        cin.get();
                       
}
Сама функция используется для вычислений, в зависимости от результатов которых будет зависеть поведение программы. Грубо говоря: "Внутри функции ты что-то одно вычисляешь, это одно записываешь после return и это одно будет как значение у обычной переменной, только для функции"
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
20.05.2013, 11:28     return зачем он? #7
Цитата Сообщение от daslex Посмотреть сообщение
если не хочешь делать из функции переменную, то пишешь без return
Он всё равно будет неявно в конце, а если надо выйти из функции в каком либо ещё месте, то в том самом месте допускается явный return без операнда.
Flassie
181 / 166 / 29
Регистрация: 03.08.2012
Сообщений: 591
Завершенные тесты: 2
20.05.2013, 12:15     return зачем он? #8
Со временем поймешь. По сути, любая функция, которая возвращает что-то - это переменная (грубо говоря).
Как и писалось выше, с функциями, возвращающими значения, можно работать как с переменными (то же присваивание, сложение и т.д. и т.п.)
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
20.05.2013, 12:59     return зачем он? #9
Цитата Сообщение от Flassie Посмотреть сообщение
По сути, любая функция, которая возвращает что-то - это переменная (грубо говоря)
я неправильно сказал, что
Цитата Сообщение от daslex Посмотреть сообщение
Если хочешь сделать из функции переменную
Функция не является переменной и переменную из функции не сделаешь. Но относится к функции как к некоторого рода вычисляемой константе можно.
MikeSoft
Эксперт C++
 Аватар для MikeSoft
3782 / 1766 / 85
Регистрация: 21.11.2009
Сообщений: 2,540
20.05.2013, 13:03     return зачем он? #10
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Ryuk, если совсем понятным языком - то можно на детском примере...
Учитель задает вопрос (скажем, решить какую-то задачу) и ждёт. Школьники начинают решать... И вот один школьник решил задачу и знает ответ. Он поднимает руку и сообщает ответ.

Так вот момент "сообщает ответ" и равен оператору return.
То есть, мы имеем нужный ответ и продолжать дальше решение не имеет смысла. Нужно сказать остальным, чтобы прекратили решать.

Даже не знаю, как это ещё проще объяснить можно
IGPIGP
Комп_Оратор)
 Аватар для IGPIGP
6176 / 2905 / 284
Регистрация: 04.12.2011
Сообщений: 7,730
Записей в блоге: 3
20.05.2013, 13:28     return зачем он? #11
Цитата Сообщение от Ryuk Посмотреть сообщение
Сколько бы книжек не перечитывал, так и не понял, зачем же все таки нужен return. Что значит: функция возвращает значение и что такое возврат значения вообще?
Я тоже не имею опыта в С++ и пишу для... Ну в общем может улыбнёт кого-то).
Функция, - поименованный блок кода, в котором кроме внутренних объявлений, раньше всех проводятся объявления через формальные параметры и их инициализация через переданные значения. Эти переменные будут по необходимости освобождены при выходе. Использование внешних и статических переменных тоже возможно. Для функций явно возвращающих значение объявляется его тип. Результат вычислений подставляется в точку вызова. Оператор return информирует компилятор о двух вещах: первое - вот и точка выхода; второе - вот и возвращаемое значение (для void - тип void). То есть точек выхода может быть несколько. При возврате из вложенных блоков нужно убедиться, что все динамические переменные и захватываемые ресурсы освобождены.
Еще важно то, что оператор return принимает выражение и тут есть 2 момента:
- первый это тот факт, что этот оператор заставляет компилятор проверять возможность неявного преобразования результата выражения к типу возвращаемого значения. То есть по возможности это хорошо бы сделать явно;
- второй это тот факт, что сложное выражение, включающее точки следования, вызова, сложные операторы, вроде:
C++
1
rerutn anotherFoo(varA)?nextOneFoo(varB):andElseOneFoo(varC);
не делают чтение/изменение и отладку, приятной. Вывод: для начала, лучше разделить вычисления на операторы, а вернуть результат.
Ещё пример того, что можно но не нужно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
void helloWorld();
void voidFoo();
int main()
{
voidFoo();
cout << endl;
    system( "pause" );
return 0;   
}
void helloWorld(){
cout<<"Hello world!";
return ;// <- это правильно. То есть можно смело удалить или закоментировать.
}
void voidFoo(){
return helloWorld();// <- вернули "значение" из void!  То есть тоже можно смело удалить оператор return.
}
Возврат из функции ссылки на переменную позволяет работать с ней как с переменной типа rvalue и это очень интересная возможность, но пока и так написал многовато.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
20.05.2013, 14:04     return зачем он? #12
Цитата Сообщение от IGPIGP Посмотреть сообщение
Ещё пример того, что можно но не нужно:
Эта штука полезна при построении шаблонов, т.е. возврат чего-то, что по сути есть void. Например:
C++
1
2
3
4
5
template<class T>
T f()
{
  return T();
}
Ну а еще можно для функции, возвращающей void делать приведение любого результата к void. Например:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
int f()
{
    std::cout << "f() called\n";
    return 42;
}
 
void g()
{
    return static_cast<void>(f());
}
 
int main() {
   g();
   return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2013, 14:29     return зачем он?
Еще ссылки по теме:

return *this; C++
Зачем биты нужны это меньше байтов но int 32 бита но я не допер зачем это нужно это 4 байта то есть int не может больше 4 байт весить? C++
C++ return

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

Или воспользуйтесь поиском по форуму:
Ryuk
 Аватар для Ryuk
179 / 177 / 33
Регистрация: 10.06.2011
Сообщений: 869
20.05.2013, 14:29  [ТС]     return зачем он? #13
MikeSoft, спасибо)
самое четкое объяснение
Yandex
Объявления
20.05.2013, 14:29     return зачем он?
Ответ Создать тему
Опции темы

Текущее время: 07:34. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru