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

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

Войти
Регистрация
Восстановить пароль
 
IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
#1

Возвращение значения из функции - C++

07.05.2013, 02:59. Просмотров 913. Ответов 7
Метки нет (Все метки)

Ребят, подскажите, когда функция возвращает значение из функции, то в памяти создается копия значения?
Я все время думал что функция на "прямую" возвращает значение в программу, после чего перестает существовать. Но вот по словам автора книги, как я понимаю создается копия. К примеру если мы возвращаем объект какого-нибудь класса
return object(a,b);
то фактически мы создаем 2 лишних объекта в памяти в добавок запускаем 2 конструктора, я прав?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2013, 02:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возвращение значения из функции (C++):

Возвращение значения из функции - C++
Добрый день. Вообщем, проблема такова: есть такой исходник (ниже), в нем находятся 3 функции (main, reading и Proverka). Вся суть вопроса в...

Возвращение значения функции - C++
Как сделать отдельно функцию, чтобы она возвращала в основную функцию значение sum? Помогите пожалуйста! #include <stdio.h> ...

Возвращение значения функции - C++
Подскажите, что означает эта запись, что она возвращает понять не могу. static FUnknown* createInstance (void* context) { ...

Возвращение значения функции - C++
Я создала структуру и конструктор. Нужно создать функцию типа этой структуры add_one_minute, которая будет прибавлять одну минуту. Но я не...

Возвращение из функции значения - C++
Всем добрый день! Я дилетант в С++, поэтому не могу получить из функции значение: char *image_dir(char *im_path, char *path, char...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
07.05.2013, 03:58 #2
IvanInanovich, для представления о механизме передачи аргументов и возврата значений, нужно разделить передачу/возврат по ссылке (копии не создаются), и передачу/возврат по значению. Для этого ещё нужно уточнить, что память, выделяемая программе делится на статическую (область данных и область кода), динамическую, называемую в некоторых средах стеком (динамической памяти). В динамической памяти располагается стек вызовов. При передаче/возврате по значению, аргументы, локальные переменные и возвращаемое значение существуют (создаются и исчезают) на стеке вызовов. Поэтому о первых и последних говорят, что они копируются. Причем, сколько создается копий какой либо переменной-значения, зависит от того сколько вызовов делает сама функция и все последующие вызванные, пока управление не вернётся и она не закончит работу вернув значение (его использует вызвавшая функция). Если в функции не вызываются пользовательские функции, это не означает, что вызовов нет. Обычная cout это вызов, поэтому легче написать в соответствующих конструкторах и деструкторе сообщения, как это делается в примерах из литературы и посмотреть, что происходит в каждом конкретном случае, чем просчитать наперёд.) В целом об этом лучше читать, иначе коротко не скажешь. Если где соврал, меня поправят.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.05.2013, 11:31 #3
IGPIGP, почему-то ничего не сказано про "кучу". А вообще, гуглинг по фразе "process memory layout" выдает много интересных картинок.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
07.05.2013, 11:37 #4
Цитата Сообщение от Tulosba Посмотреть сообщение
кучу
Куча, динамическая память, heap, - часть динамической памяти, для динамически создаваемых объектов. Человеку который начинает вникать, - отличный набор для кашеобразного замеса. И так жалею, что про "стек" динамической памяти написал.
Tulosba
07.05.2013, 11:48
  #5

Не по теме:

Цитата Сообщение от IGPIGP Посмотреть сообщение
Человеку который начинает вникать, - отличный набор для кашеобразного замеса.
Чтоб сразу понял, не влезай (без защиты) - убъёт

IvanInanovich
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 113
07.05.2013, 15:23  [ТС] #6
Нужно будет уделить время почитать по-поводу памяти. Т.к. в книге было только 2 примера как работает стек и один раз встретилось слово "куча", если бы до этого не лазил по интернету, мог бы с перепугу и не про ту кучу подумать : ))
Возможно вы знаете "тонкую" литературу про память компьютера ? Или все же лучше погуглить+википедия?
Есть одна книга про архитектуру компьютера, которую планирую прочитать, там от а до я. Но она по-моему 900+ страниц. Тут уже дело не в лени, а во времени.
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
07.05.2013, 15:41 #7
IvanInanovich, я думаю, это надо не про архитектуру компьютера, а про архитектуру ОС, скорее.
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6447 / 3094 / 306
Регистрация: 04.12.2011
Сообщений: 8,567
Записей в блоге: 4
07.05.2013, 15:49 #8
Цитата Сообщение от IvanInanovich Посмотреть сообщение
Нужно будет уделить время почитать по-поводу памяти.
Этому всегда найдётся время. Потому, что нет пределов у этого вопроса.)
Я находил и нахожу везде понемногу. Если кто-то скажет где, - буду сам рад почитать. У Evg была интересная статья, но не смог найти.
Переменные создаются живут и исчезают по разному. Ключевые слова: класс хранения (памяти), область действия, время жизни, область видимости (это уже не столько к памяти, сколько к способу и месту объявления, что важнее для разговора о памяти). Тут чем уже вопрос тем легче на него ответить. Удачи!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2013, 15:49
Привет! Вот еще темы с ответами:

Возвращение значения в функции, ссылки, вычислить корни квадратного уравнения - C++
Определить функцию вычисления корней квадратного уравнения. Функция должна возвращать значение 1, если корни найдены, значение 0, если...

Возвращение значения - C++
Понятно, когда функция возвращает число или тип bool, вот так: return true; return 0; return -1; и т.п. но что может означать...

Возвращение результата функции bool и использование его в функции main() - C++
У меня есть функция bool, которая имеет вид: bool Pisos(int row, int place) { if (...) return true; else return false;...

возвращение ненулевого значения - C++
Подскажите если функция возвращает ненулевое значение оно каждый раз меняется или как. Вот например #include <iostream.h> #include...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
07.05.2013, 15:49
Ответ Создать тему
Опции темы

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