Поиск:

Ответ в темуСоздание новой темы Создание опроса
> возврат объекта по значению 
V
    Опции темы
GoldFinch
Дата 28.7.2009, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



компилятор MSVC
есть метод
Foo Bar::foo();  // class Foo {int x,y,z;};

как будет происходить возврат объекта класса Foo по значению? 
т.е. где будет жить объект ( очевидно в стеке ) , кто выделит под него место, и т.п.
PM MAIL ICQ   Вверх
azesmcar
Дата 28.7.2009, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(GoldFinch @  28.7.2009,  12:43 Найти цитируемый пост)
как будет происходить возврат объекта класса Foo по значению? 

Скорее всего никак, сработает RVO/NRVO

Цитата(GoldFinch @  28.7.2009,  12:43 Найти цитируемый пост)
т.е. где будет жить объект ( очевидно в стеке ) 

Это temporary object. Сработает копирующий конструктор класса/структуру (для не POD типов) и копия будет возвращена.

Цитата(GoldFinch @  28.7.2009,  12:43 Найти цитируемый пост)
очевидно в стеке  

да.

Цитата(GoldFinch @  28.7.2009,  12:43 Найти цитируемый пост)
кто выделит под него место, и т.п. 

компилятор сделает все необходимое.

Это сообщение отредактировал(а) azesmcar - 28.7.2009, 12:56
PM   Вверх
GoldFinch
Дата 28.7.2009, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: нет
Всего: 26



Цитата(azesmcar @  28.7.2009,  13:51 Найти цитируемый пост)
компилятор сделает все необходимое.

я имел ввиду, вызывающий код, или вызываемая функция

---------
реверсирование показало, что реально компилится
Foo* Bar::foo(Foo*);

но я не очень уверен в этом результате
PM MAIL ICQ   Вверх
azesmcar
Дата 28.7.2009, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(GoldFinch @  28.7.2009,  13:15 Найти цитируемый пост)
я имел ввиду, вызывающий код, или вызываемая функция

Это уже не относится именно к C++, как он сгенерирует зависит от компилятора.

Цитата(GoldFinch @  28.7.2009,  13:15 Найти цитируемый пост)
Foo* Bar::foo(Foo*);

это тоже зависит от функции, если функция будет встроена то там вообще вызова функции не будет.
PM   Вверх
Rififi
Дата 28.7.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1254
Регистрация: 9.3.2008

Репутация: 2
Всего: 36



как будет происходить возврат объекта класса Foo по значению? 
в новом стандарте временный объект, созданный в функции,  "переедет" в возвращаемый (move semantic)
а пока как обычно, возврат копии через конструктор копирования
PM MAIL   Вверх
jonie
Дата 28.7.2009, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



если не ошибаюсь в win64 эта штука жить в стеке уже не будет, а будет жить в регистрах...


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0959 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.